是否有必要初始化自动属性?
public string thingy { get; set; }
我问的原因是因为我刚刚遇到一堆代码,它在哪里使用,默认值 null 是一个可接受的值。
编译器不会抱怨。
一般来说,如果编译器将默认数字为零并且对象引用仍然为空,为什么编译器会强制执行初始化?
是否有必要初始化自动属性?
public string thingy { get; set; }
我问的原因是因为我刚刚遇到一堆代码,它在哪里使用,默认值 null 是一个可接受的值。
编译器不会抱怨。
一般来说,如果编译器将默认数字为零并且对象引用仍然为空,为什么编译器会强制执行初始化?
default(T)
如果你想用特殊值初始化 autopropeties,你可以使用支持字段:
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";
}
}
或以任何方法设置
编译器强制对局部变量进行初始化,而不是对字段或属性进行初始化。C# 要求明确分配局部变量,因为使用未分配的局部变量是程序错误的常见来源。这并不是因为未分配的变量可能包含垃圾——CLR 保证它不会——而是因为程序员可能在代码中犯了错误。
编译器不会以相同的方式处理字段或属性,因为不可能跨可以按任何顺序调用的多个方法进行必要的流分析。