Необобщенные коллекции

41

Необобщенные коллекции вошли в состав среды .NET Framework еще в версии 1.0. Они определяются в пространстве имен System.Collections. Необобщенные коллекции представляют собой структуры данных общего назначения, оперирующие ссылками на объекты. Таким образом, они позволяют манипулировать объектом любого типа, хотя и не типизированным способом. В этом состоит их преимущество и в то же время недостаток. Благодаря тому что необобщенные коллекции оперируют ссылками на объекты, в них можно хранить разнотипные данные. Это удобно в тех случаях, когда требуется манипулировать совокупностью разнотипных объектов или же когда типы хранящихся в коллекции объектов заранее неизвестны. Но если коллекция предназначается для хранения объекта конкретного типа, то необобщенные коллекции не обеспечивают типовую безопасность, которую можно обнаружить в обобщенных коллекциях.

Необобщенные коллекции определены в ряде интерфейсов и классов, реализующих эти интерфейсы.

Интерфейсы необобщенных коллекций

В пространстве имен System.Collections определен целый ряд интерфейсов необобщенных коллекций. Начинать рассмотрение необобщенных коллекций следует именно с интерфейсов, поскольку они определяют функциональные возможности, которые являются общими для всех классов необобщенных коллекций. Интерфейсы, служащие опорой для необобщенных коллекций, сведены в следующей таблице:

Интерфейсы, используемые в необобщенных коллекциях
Интерфейс Описание
ICollection Определяет элементы, которые должны иметь все необобщенные коллекции
IComparer Определяет метод Compare() для сравнения объектов, хранящихся в коллекции
IDictionary Определяет коллекцию, состоящую из пар "ключ-значение"
IDictionaryEnumerator Определяет перечислитель для коллекции, реализующей интерфейс IDictionary
IEnumerable Определяет метод GetEnumerator(), предоставляющий перечислитель для любого класса коллекции
IEnumerator Предоставляет методы, позволяющие получать содержимое коллекции по очереди
IEqualityComparer Сравнивает два объекта на предмет равенства
IHashCodeProvider Считается устаревшим. Вместо него следует использовать интерфейс IEqualityComparer
IList Определяет коллекцию, доступ к которой можно получить с помощью индексатора
IStructuralComparable Определяет метод CompareTo(), применяемый для структурного сравнения
IStructuralEquatable Определяет метод Equals(), применяемый для выяснения структурного, а не ссылочного равенства. Кроме того, определяет метод GetHashCode()

Структура DictionaryEntry

В пространстве имен System.Collections определена структура DictionaryEntry. Необобщенные коллекции пар "ключ-значение" сохраняют эти пары в объекте типа DictionaryEntry. В данной структуре определяются два следующих свойства:

public object Key { get; set; }
public object Value { get; set; }

Эти свойства служат для доступа к ключу или значению, связанному с элементом коллекции. Объект типа DictionaryEntry может быть сконструирован с помощью конструктора:

public DictionaryEntry(object key, object value)

где key обозначает ключ, a value — значение.

Классы необобщенных коллекций

Ниже приведены классы необобщенных коллекций:

ArrayList

Определяет динамический массив, т.е. такой массив, который может при необходимости увеличивать свой размер.

Hashtable

Определяет хеш-таблицу для пар "ключ-значение"

Queue

Определяет очередь, или список, действующий по принципу "первым пришел — первым обслужен"

SortedList

Определяет отсортированный список пар "ключ-значение"

Stack

Определяет стек, или список, действующий по принципу "первым пришел — последним обслужен"

Пройди тесты
Лучший чат для C# программистов