Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Готовые билеты.docx
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
44 Кб
Скачать
☆

Интерфейсы пространства имен System.Collections

ICollection Определяет общие характеристики для набора элементов

IComparer Позволяет сравнивать два объекта

IDictionary Позволяет представлять содержимое объекта в виде пар «имя—значение»

IDictionaryEnumerator Используется для нумерации содержимого объекта, поддерживающего интерфейс IDictionary

IEnumerable Возвращает интерфейс IEnumerator для указанного объекта

IEnumerator Обычно используется для поддержки оператора foreach в отношении объектов

IHashCodeProvider Возвращает хеш-код для реализации типа с применением выбранного пользователем алгоритма хеширования

IList Поддерживает методы добавления, удаления и индексирования элементов в списке объектов

Коллекции пространства имен System.Collections

ArrayList Массив, динамически изменяющий свой размер

BitArray Компактный массив для хранения битовых значений

Hashtable Хеш-таблица

Queue Очередь

SortedList Коллекция, отсортированная по ключам. Доступ к элементам — по ключу или по индексу

Stack Стек

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

По умолчанию при создании объекта типа ArrayLi st строится массив из 16 элементов типа object. Можно задать желаемое количество элементов в массиве, передав его в конструктор или установив в качестве значения свойства Capacity

Основные элементы класса ArrayList

Capacity Свойство Емкость массива

Count Свойство Фактическое количество элементов массива

Item Свойство Получить или установить значение элемента по заданному индексу

Add Метод Добавление элемента в конец массива

AddRange Метод Добавление серии элементов в конец массива

BinarySearch Метод Двоичный поиск в отсортированном массиве или его части

Clear Метод Удаление всех элементов из массива

Класс ArrayList реализован через класс Array, то есть содержит закрытое поле этого класса.

Поскольку все типы в С# являются потомками класса object, массив может содержать элементы произвольного типа. Даже если в массиве хранятся обычные целые числа, то есть элементы значимого типа, внутренний класс является массивом ссылок на экземпляры типа object, которые представляют собой упакованный тип-значение. Соответственно, при занесении в массив выполняется упаковка, а при извлечении — распаковка элемента.

Если при добавлении элемента в массив оказывается, что фактическое количество элементов массива превышает его емкость, она автоматически удваивается, то есть происходит повторное выделение памяти и переписывание туда всех существующих элементов.

Для повышения надежности программ применяется следующий прием: экземляр класса ArrayList объявляется закрытым полем класса, в котором необходимо хранить коллекцию значений определенного типа, а затем описываются место работы с этой коллекцией, делегирующие свои функции методам ArrayList.

27) Классы-прототипы.

Возможность отделить алгоритмы от типов данных предоставляют классы-прототипы— классы, имеющие в качестве параметров типы данных. Чаще всего эти классы применяются для хранения данных, то есть в качестве контейнерных классов, или коллекций.

Во вторую версию библиотеки .NET добавлены параметризованные коллекции для представления основных структур данных, применяющихся при создании программ, — стека, очереди, списка, словаря и т. д. Эти коллекции, расположенные в пространстве имен System.Collections.Generic, дублируют аналогичные коллекции пространства имен System.Collections, рассмотренные в разделе «Пространство имен System.CoIlections»

Параметром класса-прототипа является тип данных, с которым он работает. Это избавляет от перечисленных недостатков.

Создание конкретного экземпляра класса-прототипа называется инстанцированием. Класс-прототип может содержать произвольное количество параметров типа. Для каждого из них могут быть заданы ограничения (constraints), указывающие, каким требованиям должен удовлетворять аргумент, соответствующий этому па­ раметру, например, может быть указано, что это должен быть значимый тип или тип, который реализует некоторый интерфейс.

Помимо класса и интерфейсов в ограничениях можно задать требование, чтобы тип-аргумент имел конструктор по умолчанию без параметров, что позволяет создавать объекты этого типа в теле методов класса-прототипа.