创建自定义集合时公开集合方法

时间:2011-11-07 16:58:56

标签: wpf class collections methods

我必须开发一个自定义的对象集合。原因有两个,我需要能够为集合分配一个内部名称,集合还需要实现一些抽象方法,就像我拥有的​​任何其他实体一样。

所以我创建了一个EntityList类。以下是该课程的片段。它包含一个id和一个实体列表,以及一堆方法。我的问题是,到目前为止,我已经提出了我需要的列表管理方法,例如Add,Insert,Remove和Clear。如果您有一个名为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();
    }
}

我是否违反了一些基本规则?当它是另一个类的成员时,我该如何管理列表呢?

2 个答案:

答案 0 :(得分:1)

只需从List<EntityBase>继承,您就不需要重新声明并实施列表方法。

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

答案 1 :(得分:0)

你应该以这种方式使你的类实现IList<EntityBase>(或至少IEnumerable<EntityBase>),你可以像对待“普通”列表一样对待它。但是,在您这样做之前,您应该阅读文档并确定最适合您需求的文档。

MSDN on IList is here
MSDN on IEnumerable is here