Стандартные интерфейсы, реализованные коллекциями. Net
В среду. NET Framework встроены коллекции, реализующие стандартные структуры данных:
- список стек, очередь, словарь (хеш-таблица).

А в пространствах имен System. Collection….. определено несколько интерфейсов, определяющих функциональность многих стандартных классов в С#, в том числе и коллекций.
Они располагаются согласно следующей иерархии:
Рассмотрим более подробно основные интерфейсы, которые реализуются в стандартных структурах данных ( коллекциях):
- IEnumerable: является основополагающим для всех коллекций!! Содержит методы, которые позволяют поэлементно получать содержимое коллекции. Другими словами, обеспечивает стандартизованный способ поэлементного доступа к содержимому коллекции, в том числе и через использование цикла foreach.
Стандартный интерфейс IEnumerable позволяет выполнить перебор с помощью оператора foreach. ( массивы, входящие в стандартные коллекции как раз и пользуются этим интерфейсом)
Интерфейс IEnumerator задает три элемента:
- свойство Current, возвращающее текущий элемент объекта; метод MoveNext, продвигающий перечислитель на следующий элемент объекта; метод Reset, устанавливающий перечислитель в начало просмотра. метод GetEnumerator(), возвращающий текущее значение элемента коллекции
Цикл foreach использует эти методы для перебора элементов, из которых состоит объект.
Таким образом, если требуется, чтобы для перебора элементов класса мог применяться цикл foreach, необходимо реализовать четыре метода: GetEnumerator, Current, MoveNext и Reset.
Сделать таблицу статических методов класса Enumerable, так как им будет нужен Any

- IEnumerator: реализация данного интерфейса позволяет перебирать элементы коллекции с помощью цикла foreach ICollection: является основой для всех необобщенных коллекций, определяет основные методы и свойства для всех необобщенных коллекций (например, метод CopyTo и свойство Count). Данный интерфейс унаследован от интерфейсаIEnumerable, благодаря чему базовый интерфейс также реализуется всеми классами необобщенных коллекций
Элемент интерфейса | Его тип | описание |
int Сount {get;} | Свойство | Определяет количество элементов коллекции в данный момент. Если Count равно нулю, то коллекция пуста. |
void CopyTo (Array target, int startIdx) | Метод | Обеспечивает переход от коллекции к стандартному С#-массиву, копируя содержимое коллекции в массив, заданный параметром target, начиная с индекса, заданного параметром startIdx. |
- IList: позволяет получать элементы коллекции по порядку. Также определяет ряд методов для манипуляции элементами: Add(добавление элементов), Remove/RemoveAt (удаление элемента) и ряд других.
Интерфейс IList наследует интерфейс ICollection и определяет поведение коллекции, доступ к элементам которой разрешен посредством индекса с отсчетом от нуля. Помимо методов, определенных в интерфейсе ICollection, интерфейс IList определяет и собственные методы:
Элемент интерфейса | Его тип | Описание |
int Add(object obj) | Метод | Добавляет объект obj в вызывающую коллекцию. Возвращает индекс, по которому этот объект сохранен |
void Clear() | Метод | Удаляет все элементы из вызывающей коллекции |
bool Contains(object obj) | Метод | Возвращает значение true, если вызывающая коллекция содержит объект, переданный в параметре obj, и значение false в противном случае |
int IndexOf(object obj) | Метод | Возвращает индекс объекта obj, если он (объект) содержится в вызывающей коллекции. Если объект obj не обнаружен, метод возвращает -1 |
void Insert(int idx, object obj) | Метод | Вставляет в вызывающую коллекцию объект obj по индексу, заданному параметром idx. Элементы, находившиеся до этого по индексу idx и далее, смещаются вперед, чтобы освободить место для вставляемого объекта obj |
void Remove(object obj) | Метод | Удаляет первое вхождение объекта obj из вызывающей коллекции. Элементы, находившиеся до этого за удаленным элементом, смещаются назад, чтобы ликвидировать образовавшуюся "брешь" |
void RemoveAt(int idx) | Метод | Удаляет из вызывающей коллекции объект, расположенный по индексу, заданному параметром idx. Элементы, находившиеся до этого за удаленным элементом, смещаются, ликвидируя образовавшуюся "брешь" |
bool IsFixedSize { get; } | Свойство | Принимает значение true, если коллекция имеет фиксированный размер. Это означает, что в такую коллекцию нельзя вставлять элементы и удалять их из нее. |
bool IsReadOnly { get; } | Свойство | Принимает значение true, если коллекция предназначена только для чтения. |
object this[int idx] { get; set; } | Индексатор | Используется для считывания или записи значения элемента с индексом idx. Нельзя применить для добавления в коллекцию нового элемента. |
- IComparer: определяет метод int Compare(object x, object y) для сравнения двух объектов
В интерфейсе IComparer определен метод Compare (), который позволяет сравнивать два объекта:
int Compare(object vl, object v2)
Метод Compare () возвращает положительное число, если значение vl больше значения v2, отрицательное, если vl меньше v2, и нуль, если сравниваемые значения равны. Этот интерфейс можно использовать для задания способа сортировки элементов коллекции.
- IDictionary: определяет поведение коллекции, при котором она должна хранить объекты в виде пар ключ-значение: для каждого объекта определяется уникальный ключ, и этому ключу соответствует определенное значение IDictionaryEnumerator: определяет методы и свойства для перечислителя словаря
Интерфейс IDictionaryEnumerator является производным от интерфейса IEnumerator и распространяет свои функциональные возможности нумератора на область словарей.
- IEqualityComparer: определяет два метода Equals и GetHashCode, с помощью которых два объекта сравниваются на предмет равенства IStructuralComparer: определяет метод Compare для структурного сравнения двух объектов: при таком сравнении сравниваются не ссылки на объекты, а непосредственное содержимое объектов IStructuralEquatable: позволяет провести структурное равенство двух объектов. Как и в случае с интерфейсом IStructuralComparer сравнивается содержимое двух объектов
Эти интерфейсы и реализуются классами коллекций.


