是否需要初始化自動屬性?c#初始化
public string thingy { get; set; }
我想問的原因是因爲我剛剛碰到一堆代碼,它被用在哪裏,空的是一個可接受值的默認值。
編譯器不會抱怨。
作爲一般性的觀點,爲什麼編譯器強制執行初始化,如果它將默認數字設置爲零並且對象引用爲空?
是否需要初始化自動屬性?c#初始化
public string thingy { get; set; }
我想問的原因是因爲我剛剛碰到一堆代碼,它被用在哪裏,空的是一個可接受值的默認值。
編譯器不會抱怨。
作爲一般性的觀點,爲什麼編譯器強制執行初始化,如果它將默認數字設置爲零並且對象引用爲空?
的設置編譯器強制執行局部變量的初始化,而不是字段或屬性。 C#要求局部變量明確分配,因爲使用未分配的局部變量是程序錯誤的常見來源。這並不是因爲未分配的變量可能包含垃圾--CLR保證它不會 - 但是因爲程序員可能在代碼中犯了錯誤。
編譯器不會以相同的方式處理字段或屬性,因爲無法對可以按任何順序調用的多個方法進行必要的流分析。
也值得一讀的是來自Eric Lippert的答案:http://stackoverflow.com/questions/8931226/are-c-sharp-uninitalized-variables-dangerous/8933935#8933935 – NoviceProgrammer 2012-08-03 08:43:35
@NoviceProgrammer感謝您發佈該鏈接。幾乎我所知道的關於C#編譯器的所有內容都來自Eric的博客或他在stackoverflow上的答案。 – phoog 2012-08-03 08:53:06
autopropeties初始化由default(T)
如果要通過特殊的值,你可以使用支持字段初始化:
private string _thingy = "value";
public string Thingy
{
get { return _thingy; }
set { _thingy = value; }
}
或設定值在構造函數中
public class MyClass
{
public string Thingy{get;set;}
public MyClass()
{
Thingy = "value";
}
}
或以任何方法
它總是默認的(T)' – leppie 2012-08-03 07:58:21
編譯器強制對本地變量進行初始化 - 它們永遠不會獲得默認值。另一方面,成員變量將得到默認值。 – 2012-08-03 08:18:38