Наследование из списка <T>в .NET (vb или C #) - PullRequest
0 голосов
/ 06 марта 2011

Я некоторое время погружался в мир C ++, но теперь я снова в мире .NET, VB и C #, и мне стало интересно, есть ли у вас класс, представляющий коллекцию чего-либо, и хотите ли вы использовать возможность это в цикле foreach и т. д. ... лучше ли реализовывать IEnumerable и IEnumerator самостоятельно или вы должны наследовать от List<T>, где T - это тип объекта в его единственном числе?

Я знаю, например, в C ++, наследование от контейнера считается плохой идеей.

А как же .NET.

EDIT:

Кажется, мой вопрос был немного неправильно понят. Я совсем не недоволен существующими коллекциями в .NET. Вот моя проблема, у меня есть класс под названием «Персона», и мне нужен набор под названием «Разведчики», который я хочу получить в классе под названием «Разведчики», на данный момент я хотел бы иметь возможность написать

foreach Person in Scouts ...

Каков наилучший способ получить этих скаутов как совокупность людей и использовать их в цикле foreach?

Ответы [ 4 ]

3 голосов
/ 06 марта 2011

Вы сказали:

У меня есть класс под названием «Персона», и мне нужна коллекция под названием «Разведчики», которую я хочу получить в классе под названием «Разведчики», на данный момент я быхотел бы иметь возможность писать

foreach Person in Scouts ...

Если я вас правильно понимаю, вы хотите:

class Scouts : IEnumerable<Person>
{
    private List<Person> scouts;

    public IEnumerator<Person> GetEnumerator()
    {
        return scouts.GetEnumerator();
    }
}
1 голос
/ 06 марта 2011

Реальный вопрос в том, почему вы хотите реализовать свою собственную «коллекцию чего-либо»? То есть почему именно вас не устраивают существующие коллекции?

После того, как вы ответите на этот вопрос (и все еще уверены, что хотите это сделать), вам лучше наследовать одну из коллекций в пространстве имен System.Collections.ObjectModel, а именно Collection<T>, KeyedCollection<T> или ReadOnlyCollection<T>, в зависимости от ваших потребностей.

1 голос
/ 06 марта 2011

В .NET редко можно реализовать IEnumerable<T> или получить из List<T>.Если вам нужна коллекция динамической длины с индексатором, вы можете использовать List<T> напрямую, а если вам нужна коллекция фиксированной длины, вы можете использовать массив T[].Пространство имен System.Collections.Generic содержит большинство общих классов коллекции.

0 голосов
/ 06 марта 2011

Тони, как обычно, «это зависит».Основное различие между IEnumerable и IList заключается в возможности добавлять и сортировать в IList.

Как сказал Дарин, более распространено просто использовать классы напрямую, а не реализовывать интерфейсы вообще.

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