Реализация моей собственной универсальной коллекции в C # - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь написать свою собственную универсальную коллекцию (List<T>) на C #, но меня перепутали с интерфейсами.Как я понимаю, чтобы создать свою собственную коллекцию, мне нужно реализовать несколько интерфейсов, таких как ICollection, IList, IEnumerator, IEnumerable и т. Д. Но я не могу понять, какие из них мне нужны.Заранее спасибо

Ответы [ 2 ]

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

Для чего ваша коллекция? Если вы реализуете IEnumerable<T> (что влечет за собой реализацию IEnumerable, то у вас есть перечислимый объект. Если у вас также есть метод Add(), то у вас есть перечислимый объект, который работает с инициализацией коллекции. Кроме того, посмотрите на общие интерфейсы коллекции и спросите, полезны ли они для ваших сценариев использования, особенно ICollection<T> (в частности, добавление и удаление) и IList<T> (в частности, индексация).

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

Вы должны реализовать IList<T> для доступа к элементам коллекции по их индексу. IList<T> наследуется от ICollection<T>, IEnumerable<T> и IEnumerable, так что вы все равно получите их.

Для более простой коллекции без доступа к элементу по индексу вы реализуете ICollection<T>, который поставляется с IEnumerable<T> и IEnumerable через наследование.

Вы можете дополнительно реализовать IReadOnlyList<T> (или IReadOnlyCollection<T> соответственно), но в этом обычно нет необходимости.

Вам также следует изучить наследование от System.Collections.ObjectModel.Collection<T>, что является рекомендуемым способом, потому что обычные стандартные реализации интерфейса уже сделаны для вас, и вы можете сосредоточиться на деталях, которые делают вашу коллекцию особенной.

...