我想做这样的事情:
Parent parent = new Parent(new Child(parent));
VS告诉我父母是未知变量。
我不想要这样的初始化:
Parent parent = new Parent();
Child child=new Child(parent);
parent.Child=child;
有可能吗?
提前感谢您的帮助。
答案 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());
你有灵活性