为什么会产生编译器错误:
class Foo
{
public Bar Baz = new Bar(this);
}
Run Code Online (Sandbox Code Playgroud)
但这不是:
class Foo
{
public Bar Baz;
public Foo()
{
this.Baz = new Bar(this);
}
}
Run Code Online (Sandbox Code Playgroud)
从概念上讲,这两者是等价的,不是吗?
Jon*_*eet 10
不,它们不完全等效......变量初始化程序在运行任何基类构造函数之前执行.构造函数的主体在运行基类构造函数后执行.(这与Java不同,其中变量初始化程序在基类构造函数之后但在构造函数体之前执行.)
因此,this在构造函数体内访问更安全:您可以确保对象至少在其基类(以及向上)方面进行初始化.
无论如何,我相信这是推理......