在c#中,对象是否可能将对自身的引用传递给它在自己的基构造函数中创建的子对象的构造函数?

本文关键字:对象 构造函数 自己的 创建 是否 引用 | 更新日期: 2023-09-27 18:12:10

那么,假设我有以下对象:

public abstract class Chicken
{
    public Egg Container { get; private set; }
    protected Chicken(Egg container)
    {
        Container = container;
    }
}
public abstract class Egg
{
    public Chicken Contents { get; private set; }
    protected Egg(Chicken contents)
    {
        Contents = contents;
    }
}
public class Buckeye : Chicken
{
    public Buckeye(Egg container) : base(container)
    {
    }
}
public class BrownEgg : Egg
{
    public BrownEgg() : base(new Buckeye(this))
    {
    }
}

感谢维基百科提供鸡的品种名称。

无论如何,前面的代码无法编译。它会告诉你"不能在成员初始化器中使用this "

所以,我想知道是否有办法做到这一点。你能传递一个引用给正在构造的对象吗,传递给正在构造的子对象吗,需要传递给外部对象基?

我可能把问题的标题写得很糟糕,但这是一个很难简洁地传达的概念。

在c#中,对象是否可能将对自身的引用传递给它在自己的基构造函数中创建的子对象的构造函数?

在调用基类构造函数时不能使用this(参见为什么不能使用'this'

可以传递创建者函数而不是填充对象,让内部构造函数传递this。比如:

protected Egg(Func<Egg, Chicken> contentsCreator) 
{
   Contents = contentsCreator(this);
}
public BrownEgg() : base(me => new Buckeye(me))
{
}

不,这就是为什么:基构造函数在你的更多派生构造函数之前触发,但是基构造函数会在this成为你的更多派生类时起作用…它没有被构造完成,因为它在触发派生构造函数之前等待基构造函数完成。我不确定这样写是否有意义,但基本上你不能把一个未构造的类传递给基类。