相关疑难解决方法(0)

为什么你不能在成员初始化器中使用'this'?

可能重复:
在成员初始化程序中不能使用'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,所以很好奇为什么一个被允许而另一个不被允许.

谢谢,亚历克斯

c#

54
推荐指数
2
解决办法
4406
查看次数

如何实例化不可变的相互递归对象?

我有一个不可变的递归类型:

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这些字段,并保持"胆量"可变,但公共接口必须是不可变的.

冰棍不变性来完成这件事的唯一途径?

我正在尝试为一系列类型建模.每种类型都有一个名称和几个属性.每个属性都有一个名称和一个类型.有一些相互递归的类型,这就是出现这个问题的地方.

c# immutability

20
推荐指数
2
解决办法
1630
查看次数

标签 统计

c# ×2

immutability ×1