2011-11-07 7 views
0

カスタムオブジェクトコレクションを開発する必要があります。その理由は2倍であり、私はコレクションに内部名を割り当てることができなければなりません。またコレクションは、私が持っている他のエンティティと同様に扱うための抽象メソッドを実装する必要があります。カスタムコレクションを作成するときのコレクションメソッドの公開

私はEntityListクラスを作成しました。以下はクラスのスニペットです。これは、IDとエンティティのリスト、さらには一連のメソッドを含んでいます。私の質問はこれまでのところ、追加、挿入、削除、クリアなど、私が必要とするリスト管理メソッドを入れました。 myEntityListというEntityListリファレンスがある場合、myEntityList.Add(newEntity)のようなものを実行できます。私はこのアプローチが好きですが、実際にはこれらのメソッドはリストに作業を渡しています。これらのメソッドを実装することもできませんし、myEntityList.Items.Add(newEntity)を使用して上記と同じアクションを実行できます。ただし、ここではオブジェクトのプロパティのメソッドに直接アクセスしています。 Itemsプロパティを完全に削除したいのですが、foreachを使用してリストを繰り返し処理する必要があり、実際のリストにアクセスする必要があることがよくあります。

私のクラス定義ですが、含まれているabstactメソッドの上書きはありません。

class EntityList 
{ 
    String entityId; 
    List<EntityBase> _entities; 

    public EntityList() 
    { 
     _entities = new List<EntityBase>(); 
    } 

    public List<EntityBase> Items 
    { 
     get { return _entities; } 
     //set { _entities = value; } 
    } 

    public void Add(EntityBase entity) 
    { 
     _entities.Add(entity); 
    } 

    public void Insert(int index, EntityBase entity) 
    { 
     _entities.Insert(index, entity); 
    } 

    public void Remove(EntityBase entity) 
    { 
     _entities.Remove(entity); 
    } 

    public void Clear() 
    { 
     _entities.Clear(); 
    } 
} 

ここではいくつかの基本規則に違反していますか?リストが別のクラスのメンバーである場合、そのリストをどのように管理すればよいですか?

答えて

1

だけList<EntityBase>から継承する、あなたは、リストのメソッドを再宣言し、実装する必要はありません。

すなわち

class EntityList : List<EntityBase> 
{ 
    String entityId; 
    //add your extra methods. 
} 
+0

より理にかなっているおかげで、。リストに項目を追加するために何らかのバリデーションを実行するなど、別の実装を使用する場合は、Listメソッドをオーバーライドすることもできます。 – WPFNewbie

0

クラスをIList<EntityBase>(または、少なくともIEnumerable<EntityBase>)に実装するようにする必要があります。これは「通常の」リストと同じように扱うことができます。しかし、これを行う前に、ドキュメントを読んで、あなたのニーズに最適なものを選んでください。

MSDN on IList is here
MSDN on IEnumerable is here

関連する問題