可能重复:
在成员初始化程序中不能使用'this'?
如果我尝试做这样的事情,为什么我会收到错误的任何想法:
public class Bar
{
public Bar(Foo foo)
{
}
}
public class Foo
{
private Bar _bar = new Bar(this);
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误说:
"不能在成员初始化程序中使用'this'"
但以下工作:
public class Foo
{
private Bar _bar;
public Foo()
{
_bar = new Bar(this);
}
}
Run Code Online (Sandbox Code Playgroud)
有谁知道这背后的原因?我的理解是这些会编译成同一个IL,所以很好奇为什么一个被允许而另一个不被允许.
谢谢,亚历克斯
我有一个不可变的递归类型:
public sealed class Foo
{
private readonly object something;
private readonly Foo other; // might be null
public Foo(object something, Foo other)
{
this.something = something;
this.other = other;
}
public object Something { get { return something; } }
public Foo Other { get { return other; } }
}
Run Code Online (Sandbox Code Playgroud)
我需要实例化这种相互引用的两个对象,即a.Other == b && b.Other == a.
我不想放弃不变性不变量,因为Foo它旨在用作flyweight.我可以(并且我认为必须)放弃readonly这些字段,并保持"胆量"可变,但公共接口必须是不可变的.
是冰棍不变性来完成这件事的唯一途径?
我正在尝试为一系列类型建模.每种类型都有一个名称和几个属性.每个属性都有一个名称和一个类型.有一些相互递归的类型,这就是出现这个问题的地方.