【发布时间】:2018-05-02 03:33:07
【问题描述】:
考虑下面的代码:
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 失败。 This 和 this 的答案和 Visual Studio 试图说服我对象初始化程序和对象构造函数后跟属性分配是相同的,但似乎并非如此。如果我用注释代码交换构造函数的主体,它就可以工作。似乎初始化程序在尝试分配属性之前实际上并没有运行构造函数。为什么?
【问题讨论】:
-
这是因为属性在构造函数运行之前被初始化,并且您正在访问
Name内部的data成员。
标签: c#