C#不同類型的成員變量(字段)的默認(rèn)值介紹
創(chuàng)建類的一個(gè)實(shí)例時(shí),在執(zhí)行構(gòu)造函數(shù)之前,如果你沒有給成員變量賦初始值,C#編譯器缺省將每一個(gè)成員變量初始化為他的默認(rèn)值。
如果變量是方法的局部變量,編譯器就會(huì)認(rèn)為在使用該變量之前,代碼必須給它顯示的設(shè)定一個(gè)值。否則會(huì)發(fā)生“使用了未賦值的局部變量”的錯(cuò)誤。
對(duì)于其他情況,編譯器會(huì)在創(chuàng)建變量時(shí),把變量初始化為默認(rèn)值。
1、對(duì)于整型、浮點(diǎn)型、枚舉類型(數(shù)值型),默認(rèn)值為0或0.0。
2、字符類型的默認(rèn)值為\x0000。
3、布爾類型的默認(rèn)值為false。
4、引用類型的默認(rèn)值為null。
如果聲時(shí)變量時(shí),為它指定了初始值(int i=10;),那么這個(gè)值就用于初始化該變量了。
雖然C#編譯器為每個(gè)類型都設(shè)置了默認(rèn)類型,但作為面向?qū)ο蟮脑O(shè)計(jì)原則,我們還是需要對(duì)變量進(jìn)行正確的初始化。實(shí)際上這也是C#推薦的做法,沒有對(duì)變量進(jìn)行初始化會(huì)導(dǎo)致編譯器發(fā)出警告信息。我們不可能為所有成員變量賦初始值,當(dāng)然就是賦了值,也不一定就滿足我們的要求。因?yàn)槲覀冊(cè)谑褂脮r(shí),有可能改變我們的初始值。那么我們就要借助構(gòu)造函數(shù)來初始化我們的成員變量。
// 系統(tǒng)將為未在構(gòu)造函數(shù)賦值的成員變量賦默認(rèn)值
using System;
public class Dog
{
public string name;
public int age;
public static void Main()
{
Dog myDog = new Dog();
Console.WriteLine("myDog的名字為“{0}”,年齡為{1}。", myDog.name, myDog.age);
}
}
上述程序中,當(dāng)創(chuàng)建對(duì)象myDog時(shí),會(huì)調(diào)用默認(rèn)的構(gòu)造函數(shù)。所有字段都會(huì)被賦給一個(gè)默認(rèn)的值。
輸出結(jié)果為:
myDog的名字為“”,年齡為0。
這種特性雖然能夠避免編譯錯(cuò)誤,但是違背了變量的“先賦值、后使用”原則,這些“無害的”默認(rèn)值很容易產(chǎn)生難以識(shí)別的錯(cuò)誤,建議盡可能地在構(gòu)造函數(shù)中對(duì)所有成員變量賦值。
相關(guān)文章
巧用Dictionary實(shí)現(xiàn)日志數(shù)據(jù)批量插入
這篇文章主要介紹了巧用Dictionary實(shí)現(xiàn)日志數(shù)據(jù)批量插入,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
WinForm實(shí)現(xiàn)基于BindingSource的方法擴(kuò)展
這篇文章主要介紹了WinForm實(shí)現(xiàn)基于BindingSource的方法擴(kuò)展,需要的朋友可以參考下2014-08-08
詳解C#中的System.Timers.Timer定時(shí)器的使用和定時(shí)自動(dòng)清理內(nèi)存應(yīng)用
這篇文章主要介紹了詳解C#中的System.Timers.Timer定時(shí)器的使用和定時(shí)自動(dòng)清理內(nèi)存應(yīng)用,需要的朋友可以參考下2017-06-06
C#異常處理中try和catch語句及finally語句的用法示例
這篇文章主要介紹了C#異常處理中try和catch語句及finally語句的用法示例,finally語句的使用涉及到了C#的垃圾回收特性,需要的朋友可以參考下2016-02-02
C#利用deskew算法實(shí)現(xiàn)圖像文本傾斜校正
這篇文章主要為大家詳細(xì)介紹了C#如何利用deskew算法實(shí)現(xiàn)圖像文本傾斜校正,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
C#緩存之SqlCacheDependency用法實(shí)例總結(jié)
這篇文章主要介紹了C#緩存之SqlCacheDependency用法,在C#程序設(shè)計(jì)中有一定的實(shí)用價(jià)值,需要的朋友可以參考下2014-08-08
Dictionary擴(kuò)展基礎(chǔ)類向字典中添加鍵和值
Dictionary<TKey, TValue> 類是常用的一個(gè)基礎(chǔ)類,但用起來有時(shí)確不是很方便。本文逐一討論,并使用擴(kuò)展方法解決2013-11-11

