2011-11-07 66 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