考虑下面的代码:
class Data
{
public string Name;
public string NameWithSufix;
}
class Behaviour
{
private Data data;
public string Name { get { return data.Name; } private set { } }
public Behaviour()
{
data = new Data()
{
Name = "My Name",
NameWithSufix = Name + " Sufix",
};
//data = new Data();
//data.Name = "My Name";
//data.NameWithSufix = Name + " Sufix";
}
}
class Program
{
static void Main(string[] args)
{
Behaviour behaviour = new Behaviour();
}
}
如果您运行这个程序,它将在Name属性处失败,抛出NullReferenceException异常。这篇文章和这篇文章以及Visual Studio试图说服我对象初始化和对象构造函数跟随属性赋值是相同的,但事实并非如此。如果我将构造函数主体与注释代码交换,它可以正常工作。看起来好像初始化器在尝试分配属性之前并没有真正运行构造函数。为什么呢?
Name
中访问data
的成员。 - Crowcoder