如何自动更改添加到列表中的对象?

时间:2013-02-23 16:31:46

标签: c# list

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

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

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

  1. children.Add()
  2. children.AddRange()
  3. new List<MyClass>(){ new MyClass(){}, /* ... */, new MyClass(){} }
  4. 也许有一些更好的方法可以让所有第一代孩子知道他们的父母对象是谁?

2 个答案:

答案 0 :(得分: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; } }
}

答案 1 :(得分: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); }