Теоретический материал
В пространстве имен System.Collection определено несколько интерфейсов, определяющих функциональность многих стандартных классов в С#, в том числе и коллекций (которые будет рассматриваться в следующем разделе). Рассмотрим более подробно интерфейсные коллекции, описание которых приведено в следующей таблице:
Интерфейс | Описание |
IEnumerator | Содержит методы, которые позволяют поэлементно получать содержимое коллекции |
IEnumerable | Определяет метод GetEnumerator( ), который поддерживает нумератор для любого класса коллекции |
ICollection | Определяет элементы, которые должны иметь все коллекции |
IComparer | Определяет метод Compare( ) , который выполняет сравнение объектов, хранимых в коллекции |
IList | Определяет коллекцию, к которой можно получить доступ посредством индексатора |
IDictionary | Определяет коллекцию (словарь), которая состоит из пар ключ/значение |
IDictionaryEnumerator | Определяет нумератор для коллекции, которая реализует интерфейс IDictionary |
IHashCodeProvider | Определяет хеш-функцию |
Основополагающим для всех коллекций является реализация перечислителя (нумератора), который поддерживается интерфейсами IEnumerator и IEnumerable. Перечислитель обеспечивает стандартизованный способ поэлементного доступа к содержимому коллекции, в том числе и через использование цикла foreach.
Интерфейс ICollection наследует интерфейс IEnumerable. В ICollection объявлены основные методы и свойства, без которых не может обойтись ни одна коллекция:
Элемент интерфейса | Его тип | описание |
int Сount {get;} | Свойство | Определяет количество элементов коллекции в данный момент. Если Count равно нулю, то коллекция пуста. |
void CopyTo (Array target, int startIdx) | Метод | Обеспечивает переход от коллекции к стандартному С#-массиву, копируя содержимое коллекции в массив, заданный параметром target, начиная с индекса, заданного параметром startIdx . |
Интерфейс 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. Нельзя применить для добавления в коллекцию нового элемента. |
Интерфейс IDictionary наследует интерфейс ICollection. Он определяет поведение коллекции, которая устанавливает соответствие между уникальными ключами и значениями. Коллекции, реализующий интерфейс IDictionary называют словарями. Ключ - это объект, который используется для получения соответствующего ему значения. Сохраненную однажды пару можно затем извлечь по заданному ключу.
Элемент интерфейса | Его тип | Описание |
void Add (object к, object v) | метод | Добавляет в вызывающую коллекцию пару ключ/значение, заданную параметрами к и v. Ключ к не должен быть нулевым. При попытке задать нулевой ключ генерируют исключение типа NotSupportedException Если окажется, что ключ к уже хранится в коллекции, генерируется исключение типа ArgumentException |
void Clear () | метод | Удаляет все пары ключ/значение из вызывающей коллекции |
bool Contains (object к) | метод | Возвращает значение true , если вызывающая коллекция содержит объект к в качестве ключа. В противном случае возвращает значение false |
IDictionaryEnumerator GetEnumerator() | метод | Возвращает нумератор для вызывающей коллекции |
void Remove (object к) | метод | Удаляет элемент, ключ которого равен значению к |
bool isFixedSize { get } | свойство | Равно значению true , если коллекция имеет фиксированный размер |
bool isReadOnly { get } | свойство | Равно значению true, если коллекция предназначена только для чтения |
ICollection Keys { get } | свойство | Получает коллекцию ключей |
icollection Values { get} | свойство | Получает коллекцию значений |
object this[object key] { get; set; } | индексатор | Этот индексатор можно использовать для получения или установки значения элемента, а также для добавления в коллекцию нового элемента. "Индекс" в данном случае является ключом элемента. |
Интерфейс IDictionaryEnumerator является производным от интерфейса IEnumerator и распространяет свои функциональные возможности нумератора на область словарей.
В интерфейсе IComparer определен метод Compare (), который позволяет сравнивать два объекта:
int Compare(object vl, object v2)
Метод Compare () возвращает положительное число, если значение vl больше значения v2, отрицательное, если vl меньше v2, и нуль, если сравниваемые значения равны. Этот интерфейс можно использовать для задания способа сортировки элементов коллекции.
Интерфейс IHashCodeProvider должен быть реализован коллекцией, если программисту необходимо определить собственную версию метода GetHashCode ().
Дата добавления: 2017-03-29; просмотров: 286;