В силу характерных отличий каждый из пяти типов коллекций (необобщенных, обобщенных, специальных, с поразрядной организацией и параллельных) будет рассмотрен далее в этой главе отдельно.
Необобщенные коллекции
Необобщенные коллекции вошли в состав среды .NET Framework еще в версии 1.0. Они определяются в пространстве именSystem. Collections.Необобщенные коллекции представляют собой структуры данных общего назначения, оперирующие ссылками на объекты. Таким образом, они позволяют манипулировать объектом любого типа, хотя и не типизированным способом. В этом состоит их преимущество и в то же время недостаток. Благодаря тому что необобщенные коллекции оперирухрт ссылками на объекты, в них можно хранить разнотипные данные. Это удобно в тех случаях, когда требуется манипулировать совокупностью разнотипных объектов или же когда типы хранящихся в коллекции объектов заранее неизвестны. Но если коллекция предназначается для хранения объекта конкретного типа, то необобщенные коллекции не обеспечивают типовую безопасность, которую можно обнаружить в обобщенных коллекциях.
Необобщенные коллекции определены в ряде интерфейсов и классов, реализующих эти интерфейсы. Все они рассматриваются далее по порядку.
Интерфейсы необобщенных коллекций
В пространстве имен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.