自动设置子项的父引用

nw.*_*nw. 3 c#

我有一个包含一个IList<T>名为的属性的类Children.每个孩子都应该参考其父母.我的解决方案是ChildClass.ParentParentClass.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)

Jus*_*ner 8

它可能只是我...但这看起来像一个糟糕的设计.

如果这是一个真正的父母 - >儿童关系,你不应该允许任何人创建一个孤儿.因此,应在创建时将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)