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

自動的に追加されるインスタンスごとに、現在の値にList<MyClass> children自動的に設定できるようにしたいと思います。コード内のどこにでもこれを行う別のメソッドを配置したくありません。parentContainerMyClassMyClasschildren

アプリケーション全体で、次の3つの方法でリストにアイテムを追加します。

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

たぶん、すべての第1世代の子供に、親オブジェクトが誰であるかを知らせるためのより良い方法がありますか?

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 に答える