我有一个包含一个IList<T>名为的属性的类Children.每个孩子都应该参考其父母.我的解决方案是ChildClass.Parent在ParentClass.Childrengetter中设置属性.有更好的方法,还是这是最好的解决方案?
class ParentClass
{
private IList<ChildClass> _children;
public virtual IList<ChildClass> Children
{
get
{
// make sure each child refers to its parent (this)
foreach (ChildClass c in _children)
{
c.Parent = c.Parent ?? this;
}
return _children;
}
set
{
_children = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
它可能只是我...但这看起来像一个糟糕的设计.
如果这是一个真正的父母 - >儿童关系,你不应该允许任何人创建一个孤儿.因此,应在创建时将Parent设置为Child.
我可能会这样做:
class ChildClass
{
private ParentClass _parent;
public ChildClass(ParentClass parent)
{
_parent = parent;
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
class ParentClass
{
private List<ChildClass> _children;
public virtual ReadOnlyCollection<ChildClass> Children
{
get
{
return _children.AsReadOnly();
}
}
public virtual ChildClass CreateChild()
{
// Set parent in child class constructor
ChildClass newChild = new ChildClass(this);
_children.Add(newChild);
return newChild;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2895 次 |
| 最近记录: |