Необобщенные коллекции
41C# --- Руководство по C# --- Необобщенные коллекции
Необобщенные коллекции вошли в состав среды .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
Определяет стек, или список, действующий по принципу "первым пришел — последним обслужен"