我有两个类。第一类是Parent
,它有一个对象列表(Child
)。每个Child
都提及他的Parent
类。问题是如何通过构造函数来实现这个引用。如何通过构造函数正确初始化两个类之间的父类和子类引用
public sealed class Child
{
public Child(string id, string name, Parent parent)
{
Id = id;
Name = name;
Parent = parent;
}
public Parent ParentInstance { get; private set; }
public string Id { get; private set; }
public string Name { get; private set; }
}
public sealed class Parent
{
public Parent(string id, string name, IEnumerable<Child> children)
{
Id = id;
Name = name;
Children = children;
}
public string Id { get; private set; }
public string Name { get; private set; }
public IEnumerable<Child> Children { get; private set; }
}
的问题是,我有一些解析XML代码,并创建Parent
对象列表中选择一个代码。这里是例子:
internal Parent ParseParent(XElement parentXElement)
{
return new Parent(parentXElement.Attribute("id").Value, parentXElement.Attribute("name").Value, parentXElement.Descendants("child").Select(ParseChild));
}
我当然可以Parent
构造函数初始化内的Parent
财产,刚刚从Parent
二传手删除private
然后去trhough所有儿童和使用该财产。但是我想让它成为只读的。类似这样的:
public Parent(string id, string name, IEnumerable<Child> children)
{
Id = id;
Name = name;
Children = children.ForEach(c => c.ParentInstance = this);
}
您是否有*参考文献是双向的?基本上你不能有两个不可变类型的实例干净地相互引用。 (你可以在构造函数中做些东西,例如将尚未完全初始化的父对象传递给子对象,但会变得混乱。) –
在孩子未出生之前没有父母! –
@JonSkeet我需要两种方式。什么是最好的方法来做到这一点?可能你知道它很热,它首先在EF代码中实现。因为我记得它有一个特性,我们可以为父级声明属性并为子级声明prop。 –