在构造函数c#中调用parent

时间:2014-03-20 18:37:52

标签: c#

我想做这样的事情:

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

VS告诉我父母是未知变量。

我不想要这样的初始化:

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

有可能吗?

提前感谢您的帮助。

6 个答案:

答案 0 :(得分:6)

如果您考虑一下,那么当您首先尝试创建父母时,您会尝试将孩子传给孩子。当你new Child()时,父母还没有存在,所以没有什么可以传递的。

你可以做的是:

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

因此:

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

答案 1 :(得分:6)

更好的解决方案可能是在Parent中使用构造函数为您创建子项:

public class Parent
{
    public Child {get; set;}

    public Parent()
    {
        Child = new Child(this);
    }
}

答案 2 :(得分:1)

你的

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());

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

我能想到的与该进程最接近的等价物是Parent类在其构造函数中创建Child,将自身传递给Child构造函数。然后,它可以将自己的.child成员设置为该结果对象,并且您具有所需的结构。

答案 5 :(得分:0)

这个怎么样:

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());

你有灵活性