在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;
可能吗?
提前感谢您的帮助。
如果你想一下,你试图传递给孩子你的父母,而你实际上试图在第一个地方创建父母。当您执行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());
你有灵活性