0
class MyClass                { MyClass parent; }    
class Container    : MyClass { List<MyClass> children; }
class NonContainer : MyClass {}

我希望能够为自动添加到其中的每个实例List<MyClass> children自动设置parent当前值。我真的不想在我添加到代码中的任何地方放置一个单独的方法。ContainerMyClassMyClasschildren

在我的整个应用程序中,我通过三种方式将项目添加到列表中:

  1. children.Add()
  2. children.AddRange()
  3. new List<MyClass>(){ new MyClass(){}, /* ... */, new MyClass(){} }

也许有更好的方法让所有第一代孩子都知道他们的父对象是谁?

4

2 回答 2

3

将子列表保持私有,并通过公共方法和属性使子列表可访问

class Container : MyClass {
    private readonly List<MyClass> _children = new List<MyClass>();

    public void AddChild(MyClass child)
    {
        child.Parent = this;
        _children.Add(child);
    }

    public void AddChildren(IEnumerable<MyClass> children)
    {
        foreach (MyClass child in children) {
            AddChild(child);
        }
    }

    public IEnumerable<MyClass> Children { get { return _children; } }
}
于 2013-02-23T17:00:17.577 回答
0

继承List这样的:

public class ChildrenList : List<MyClass>
{
    public MyClass Parent { get; private set; }

    public ChildrenList(MyClass parent) { this.Parent = parent; }

    public override void Add(MyClass item)
    {
        item.Parent = Parent;
        base.Add(item);
    }
}

然后在容器中使用它:

class Container : MyClass { List<MyClass> children = new ChildrenList(parent); }
于 2013-02-23T16:37:19.187 回答