是否需要初始化自动属性?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