Предоставление методов сбора при создании пользовательской коллекции - PullRequest
0 голосов
/ 07 ноября 2011

Я должен разработать собственную коллекцию объектов.Причина двоякая: мне нужно иметь возможность присваивать коллекции внутреннее имя, а в коллекции также должны быть реализованы некоторые абстрактные методы, которые будут обрабатываться, как и любой другой объект, который у меня есть.

Итак, я создалКласс EntityList.Ниже приведен фрагмент класса.Он содержит идентификатор и список сущностей, а также несколько методов.Мой вопрос заключается в следующем: пока я включил в методы управления списком, которые мне нужны, такие как «Добавить», «Вставить», «Удалить» и «Очистить».Если у вас есть ссылка на EntityList с именем myEntityList, вы можете выполнить что-то вроде 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 ]

1 голос
/ 07 ноября 2011

Просто наследуйте от List<EntityBase>, тогда вам не нужно будет повторно декларировать и реализовывать методы списка.

т.е.

class EntityList : List<EntityBase>
{
   String entityId;
   //add your extra methods.
}
0 голосов
/ 07 ноября 2011

вы должны сделать так, чтобы ваш класс реализовал IList<EntityBase> (или, по крайней мере, IEnumerable<EntityBase>) таким образом, вы можете обращаться с ним как с "обычным" списком. Однако прежде чем сделать это, вам, вероятно, следует прочитать документацию и решить, что лучше всего подходит для ваших нужд.

MSDN на IList здесь
MSDN на IEnumerable находится здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...