Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Руководство_по_C#.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
10.01 Mб
Скачать

12.13.2Структура BitVector32

Если необходимое количество бит известно заранее, то вместо BitArray можно использовать структуру BitVector32. Структура BitVector32 более эффективна, поскольку это тип значения, хранящий биты в стеке внутри целого числа. В единственном целом числе имеется место для 32 бит. Если нужно больше, можно применять множество значений BitVector32 или же BitArray. Класс BitArray при необходимости может расти, а структура BitVector32 лишена такой возможности.

Ниже перечислены члены структуры BitVector32, которые существенно отличаются от BitArray:

Data

Свойство Data возвращает данные BitVector32 в виде целого числа.

Item

Значение BitVector32 может быть установлено с использованием целого числа. Индексатор перегружен: получать и устанавливать значения можно с использованием маски или секции типа BitVector32.Section.

CreateMask()

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

CreateSelection()

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

В приведенном ниже примере создается структура BitVector32 с помощью конструктора по умолчанию, при этом все 32 бита инициализируются false. Затем создаются маски для доступа к битам внутри битового вектора. Первый вызов CreateMask() создает маску для доступа к первому биту. После вызова CreateMask() значение bitl равно 1. Еще один вызов CreateMask() возвращает маску для доступа ко второму биту, которая равна 2. bit3 имеет значение 4 для доступа к биту номер 3. bit4 имеет значение 8 для доступа к биту номер 4.

Затем маски используются с индексатором для доступа к битам внутри вектора бит и соответствующей установки полей:

var bitsl = new BitVector32();

int bitl = BitVector32.CreateMask();

int bit2 = BitVector32.CreateMask(bitl);

int bit3 = BitVector32.CreateMask(bit2);

int bit4 = BitVector32.CreateMask(bit3);

int bit5 = BitVector32.CreateMask(bit4);

bitsl[bitl] = true;

bitsl[bit2] = false;

bitsl[bit3] = true;

bitsl[bit4] = true;

bitsl[bi15] = true;

Console.WriteLine(bits1);

12.14Специальные и наблюдаемые коллекции

12.14.1Специальные коллекции

В среде .NET Framework предусмотрен ряд специальных коллекций, оптимизированных для работы с данными конкретного типа или для их обработки особым образом. Классы этих необобщенных коллекций определены в пространстве имен System.Collections.Specialized и перечислены ниже:

Специальные коллекции C#

Класс специальной коллекции

Описание

CollectionsUtil

Содержит фабричные методы для создания коллекций

HybridDictionary

Предназначен для коллекций, в которых для хранения небольшого количества пар "ключ-значение" используется класс ListDictionary. При превышении коллекцией определенного размера автоматически используется класс Hashtable для хранения ее элементов

ListDictionary

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

NameValueCollection

Предназначен для отсортированных коллекций, в которых хранятся пары "ключ-значение", причем и ключ, и значение относятся к типу string

OrderedDictionary

Предназначен для коллекций, в которых хранятся индексируемые пары "ключ-значение"

StringCollection

Предназначен для коллекций, оптимизированных для хранения символьных строк

StringDictionary

Предназначен для хеш-таблиц, в которых хранятся пары "ключ-значение", причем и ключ, и значение относятся к типу string

Кроме того, в пространстве имен System.Collections определены три базовых абстрактных класса: CollectionBase, ReadOnlyCollectionBase и DictionaryBase. Эти классы могут наследоваться и служить в качестве отправной точки для разработки собственных специальных коллекций.