c#初始化

时间:2012-08-03 07:54:19

标签: c# initialization

是否需要初始化自动属性?

public string thingy { get; set; }

我问的原因是因为我刚遇到一堆代码,其中使用的是null,默认值为null是可接受的值。

编译器不会抱怨。

作为一般观点,为什么编译器会强制执行初始化,如果它将默认数字设置为零并且对象引用仍然为null?

2 个答案:

答案 0 :(得分:5)

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";
    }
}

或以任何方法设置

答案 1 :(得分:3)

编译器强制执行局部变量的初始化,而不是字段或属性。 C#要求明确赋值局部变量,因为使用未分配的局部变量是程序错误的常见来源。这不是因为未分配的变量可能包含垃圾 - CLR保证它不会 - 但是因为程序员可能在代码中犯了错误。

编译器不会以相同的方式处理字段或属性,因为无法对可以按任何顺序调用的多个方法进行必要的流分析。