Необобщенные коллекции определены в ряде интерфейсов и классов, реализующих эти интерфейсы. Все они рассматриваются далее по порядку.
Интерфейсы необобщенных коллекций
В пространстве имен System. Collections определен целый ряд интерфейсов необобщенных коллекций. Начинать рассмотрение необобщенных коллекций следует именно с интерфейсов, поскольку они определяют функциональные возможности, которые являются общими для всех классов необобщенных коллекций. Интерфейсы, служащие опорой для необобщенных коллекций, сведены в табл. 25.1. Каждый из этих интерфейсов подробно описывается далее.
Таблица 25.1. Интерфейсы необобщенных коллекций
Интерфейс
Описание
ICollection
Определяет элементы, которые должны иметь все необобщенные коллекции
IComparer
Определяет метод Compare ()для сравнения объектов, хранящихся в коллекции
IDictionary
Определяет коллекцию, состоящую из пар “ключ-значение”
IDictionaryEnumerator
Определяет перечислитель для коллекции, реализующей интерфейс IDictionary
IEnumerable
Определяет метод GetEnumerator (), предоставляющий перечислитель для любого класса коллекции
IEnumerator
Предоставляет методы, позволяющие получать содержимое коллекции по очереди
IEqualityComparer
Сравнивает два объекта на предмет равенства
IHashCodeProvider
Считается устаревшим. Вместо него следует использовать интерфейс IEqualityComparer
IList
Определяет коллекцию, доступ к которой можно получить с помощью индексатора
IStructuralComparable
Определяет метод CompareTo (), применяемый для структурного сравнения
IStructuralEquatable
Определяет метод Equals (), применяемый для выяснения структурного, а не ссылочного равенства. Кроме того, определяет метод GetHashCode ()
Интерфейс ICollection
Интерфейс ICollection служит основанием, на котором построены все необобщенные коллекции. В нем объявляются основные методы и свойства для всех необобщенных коллекций. Он также наследует от интерфейса IEnumerable.
В интерфейсе ICollection определяются перечисленные ниже свойства. Свойство Count используется чаще всего, поскольку оно содержит количество элементов, хранящихся в коллекции на данный момент. Если значение свойства Count равно нулю, то коллекция считается пустой.
В интерфейсе ICollection определяется следующий метод.
void CopyTo(Array target , int startldx)
Свойство Назначение
int Count { get;} Содержит количество элементов в коллекции на дан
ный момент
bool isSynchronized { get;} Принимает .логическое значение true,если коллек
ция синхронизирована, а иначе — логическое значение false.По умолчанию коллекции не синхронизированы. Но для большинства коллекций можно получить синхронизированный вариант object SyncRoot { get;} Содержит объект, для которого коллекция может
_быть синхронизирована_
Метод CopyTo () копирует содержимое коллекции в массив target, начиная с элемента, указываемого по индексу startldx. Следовательно, метод CopyTo () обеспечивает в C# переход от коллекции к стандартному массиву.
Благодаря тому что интерфейс ICollection наследует от интерфейса I Enumerable, в его состав входит также единственный метод, определенный в интерфейсе IEnumerable. Это метод GetEnumerator () , объявляемый следующим образом.
IEnumerator GetEnumerator()
Он возвращает перечислитель для коллекции.
Вследствие того же наследования от интерфейса IEnumerable в интерфейсе ICollection определяются также четыре следующих метода расширения: AsParallel (), AsQueryable (), Cast () и Of Type (). В частности, метод AsParallel () объявляется в классе System. Linq. ParallelEnumerable, метод AsQueryable () — в классе System. Linq. Queryable, а методы Cast () и Of Type () — в классе System. Linq.Enumerable. Эти методы предназначены главным образом для поддержки LINQ, хотя их можно применять и в других целях.
Читать дальше