我有以下代码类:
public class Foo
{
public Nested Bar { get; } = new Nested(this);
public class Nested
{
public Nested(Foo foo)
{
foo.DoSomething();
}
}
private void DoSomething()
{
}
}
但是,出现此编译错误:
关键字“ this”在当前上下文中不可用
我可以通过不使用自动属性初始化程序来对其进行修复,而应将其显式移动到构造函数中:
public Nested Bar { get; }
public Foo()
{
this.Bar = new Nested(this);
}
为什么会这样呢?自动属性初始化程序实际上不是转换为IL中的构造函数代码吗?
简单:您不能this
在初始化程序中使用。这样做的目的是防止逃逸不完整的对象- Nested(this)
可能对对象造成任何影响,从而导致非常混乱且难以理解的错误。请记住,初始化程序要在您添加的任何构造函数之前执行。对于字段初始化器,同样的事情也会以相同的方式失败:
private Nested _field = new Nested(this);
本质上,初始化器旨在执行简单的初始化-解决了98%的问题。任何涉及到的事情this
都更加复杂,您需要编写自己的构造函数-并为任何计时问题负责:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句