2011-11-07 112 views
0

我必須開發一個自定義對象集合。原因有兩點,我需要能夠爲集合指定一個內部名稱,並且集合還需要實現一些抽象方法,以像我擁有的​​任何其他實體一樣對待。創建自定義集合時暴露收集方法

所以我創建了一個EntityList類。以下是該課程的一部分。它包含一個id和一個實體列表,以及一堆方法。我的問題是,到目前爲止,我已經把我需要的列表管理方法,如添加,插入,刪除和清除。如果您有一個名爲myEntityList的EntityList引用,您可以執行類似myEntityList.Add(newEntity)的操作。我喜歡這種方法,但真的這些方法只是把工作交給清單。我也可以不實現任何這些方法,並且可以使用myEntityList.Items.Add(newEntity)執行與上面相同的操作。但是,在這裏您直接訪問對象屬性的方法。我想完全刪除Items屬性,但是我經常需要使用foreach遍歷列表,並且需要訪問實際列表。

這是我的類定義,它沒有重寫包含的抽象方法。

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