在c#构造函数中调用parent

本文关键字:调用 parent 构造函数 | 更新日期: 2023-09-27 17:51:05

我想这样做:

Parent parent = new Parent(new Child(parent));

VS告诉我父变量是未知的

我不想要这样的初始化:

Parent parent = new Parent();
Child child=new Child(parent);
parent.Child=child;

可能吗?

提前感谢您的帮助。

在c#构造函数中调用parent

如果你想一下,你试图传递给孩子你的父母,而你实际上试图在第一个地方创建父母。当您执行new Child()时,parent还不存在,因此没有东西可以传递。

你可以这样做:

class Parent
{
    public Child CreateChild()
    {
         return new Child(this)
    }
}

,因此:

Parent parent = new Parent();
Child child= parent.CreateChild();

一个更好的解决方案可能是在Parent中有一个构造函数为您创建子:

public class Parent
{
    public Child {get; set;}
    public Parent()
    {
        Child = new Child(this);
    }
}

public class Parent
{
    public Parent(Child ch)
    {
        this.Child = ch;
        this.Child.Parent = this;
    }
    public Child Child {get; set;}
}
初始化:

Parent parent = new Parent(new Child());

你想做的事是不可能的。在没有更多信息的情况下,最好的猜测是让父构造函数实例化子构造函数,并将其发送'this'。

class Parent
{
  public Parent()
  {
     _child = new Child(this);
  }
   private Child _child;
}

即使语法是可能的,parent在调用之后才会有一个有用的值(可能是null)。无论如何,你都需要设置一个新值。

我能想到的与此过程最接近的等价过程是Parent类在其构造函数中创建Child,将自身传递给Child构造函数。然后它可以将自己的.child成员设置为结果对象,这样就有了你想要的结构

这个怎么样:

public class Parent
{
    private IList<Child> _children = new List<Child>();
    public Parent() {} // probably don't want to hide default ctor
    public Parent(Child c)
    {
        AddChild(c);
    }
    public Parent AddChild(Child c)
    {
        c.Parent = this;
        _children.Add(c);
        return this;
    }
    public IList<Child> Children { get { return _children; } }
}
public class Child
{
    public Parent Parent { get; set; }
}

那么你可以这样做:

Parent parent = new Parent()
    .AddChild(new Child())
    .AddChild(new Child());

Parent parent = new Parent(new Child())
    .AddChild(new Child());

你有灵活性