1

これは私が何度か遭遇したパターンであり、私は周りを検索しましたが、最良のアプローチが何であるかについてのコンセンサスを見つけていません.

public class ItemListWrapper
{
    public List<Item> Contents;
}

public class Item
{
   void DoStuffAndRemove() { }
}

DoStuffAndRemove() が呼び出されたときに、アイテムが何らかの機能を実行してから、ItemListWrapper から削除されるようにします。私が考えることができる2つのアプローチは、ItemListWrapperにIListを実装させることです(実行可能ですが、定型コードをすべて書かなければならないのはちょっと面倒です)、各アイテムにデリゲートを渡して呼び出すことで、リストからそれ自体を削除します(非常に複雑なようです) .

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

2

他の理由でこれを持っている必要があると思います。ItemListWrapper2 つのアプローチを見てみましょう。

1. 各項目にはそのリストへの参照があります

public class ItemListWrapper
{
    public List<Item> Contents;

    public void Add(Item item){ item.List = this; this.Contents.Add(item); }
}

public class Item
{
   ItemListWrapper List;
   void DoStuffAndRemove() { this.List.Contents.Remove(this); }
}

2. リストにすべてをコントロールさせる

public class ItemListWrapper
{
    public List<Item> Contents;

    public void DoStuffAndRemove(Item item)
    { 
        if(this.Contents.Contains(item))
        {
            item.DoStuff();
            this.Contents.Remove(item);
        }
    }
}

public class Item
{
   void DoStuff() { ... }
}

私見、リストにはその項目に対する責任がなければならないことを理解しているので、2番目の方が優れています。

于 2013-03-22T17:17:24.537 に答える