Я пытаюсь написать свою собственную общую коллекцию (List<T>
) на С#, но запутался с интерфейсами. Насколько я понимаю, чтобы создать свою коллекцию, мне нужно реализовать несколько интерфейсов, таких как ICollection, IList, IEnumerator, IEnumerable и т. д. Но я не могу понять, какие именно мне нужны. заранее спасибо
Реализация моей собственной универсальной коллекции на C#
Ответы (2)
Вы должны реализовать IList<T>
для доступа к элементам коллекции по их индексу. IList<T>
наследуется от ICollection<T>
, IEnumerable<T>
и IEnumerable
, так что вы все равно их получите.
Для более простой коллекции без доступа к элементу по индексу вы реализуете ICollection<T>
, который приходит с IEnumerable<T>
и IEnumerable
через наследование.
Вы можете дополнительно реализовать IReadOnlyList<T>
(или IReadOnlyCollection<T>
соответственно), но обычно в этом нет необходимости.
Вы также должны вместо этого рассмотреть возможность наследования от System.Collections.ObjectModel.Collection<T>
, что является рекомендуемым способом, потому что стандартные реализации стандартного интерфейса уже сделаны за вас, и вы можете сосредоточиться на частях, которые делают вашу коллекцию особенной.
IList
может быть или не быть необходимой.
- person HimBromBeere; 06.03.2019
Для чего ваша коллекция? Если вы реализуете IEnumerable<T>
(что влечет за собой реализацию IEnumerable
, то у вас есть перечисляемый объект. Если у вас также есть метод Add()
, у вас есть перечисляемый объект, который работает с инициализацией коллекции. Помимо этого, посмотрите на общие интерфейсы коллекции и спросите, полезны ли они для ваших вариантов использования, особенно ICollection<T>
(в частности, добавление и удаление) и IList<T>
(в частности, индексация).
List<T>
, так как его можно легко спутать с версией, которая уже есть в .Net. - person phuzi   schedule 06.03.2019