Класс BitArray
служит для хранения отдельных битов в коллекции. А поскольку в коллекции этого класса хранятся биты, а не объекты, то своими возможностями он отличается от классов других коллекций. Тем не менее в классе BitArray
реализуются интерфейсы ICollection
и IEnumerable
как основополагающие элементы поддержки всех типов коллекций. Кроме того, в классе BitArray
реализуется интерфейс ICloneable
.В классе BitArray
определено несколько конструкторов. Так, с помощью приведенного ниже конструктора можно сконструировать объект типа BitArray
из массива логических значений.
public BitArray(bool[] values
)
В данном случае каждый элемент массива values
становится отдельным битом в коллекции. Это означает, что каждому элементу массива values соответствует отдельный бит в коллекции. Более того, порядок расположения элементов в массиве values
сохраняется и в коллекции соответствующих им битов.Коллекцию типа BitArray
можно также составить из массива байтов, используя следующий конструктор.
public BitArray( byte[] bytes)
Здесь битами в коллекции становится уже целый их набор из массива bytes,
причем элемент bytes [0] обозначает первые 8 битов, элемент bytes[1] — вторые 8 битов и т.д. Аналогично, коллекцию типа BitArray
можно составить из массива целочисленных значений, используя приведенный ниже конструктор.
public BitArray(int[ ] values)
В данном случае элемент values[0]
обозначает первые 32 бита, элемент values[1] — вторые 32 бита и т.д.С помощью следующего конструктора можно составить коллекцию типа BitArray
, указав ее конкретный размер:
public BitArray(int length)
где length
обозначает количество битов в коллекции, которые инициализируются логическим значением false. В приведенном ниже конструкторе можно указать не только размер коллекции, но и первоначальное значение составляющих ее битов.
public BitArray(int length, bool defaultValue)
В данном случае все биты в коллекции инициализируются значением defaultValue,
передаваемым конструктору в качестве параметра.И наконец, новую коллекцию типа BitArray
можно создать из уже существующей, используя следующий конструктор.
public BitArray(BitArray bits)
Вновь сконструированный объект будет содержать такое же количество битов, как и в указываемой коллекции bits,
а в остальном это будут две совершенно разные коллекции.Коллекции типа BitArray
подлежат индексированию. По каждому индексу указывается отдельный бит в коллекции, причем нулевой индекс обозначает младший бит.В классе BitArray
определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Методы этого класса приведены в табл. 25.9. Обратите внимание на то, что в классе BitArray
не поддерживается метод Synchronized()
. Это означает, что для коллекций данного класса синхронизированная оболочка недоступна, а свойство IsSynchronized
всегда имеет логическое значение false. Тем не менее для управления доступом к коллекции типа BitArray
ее можно синхронизировать для объекта, предоставляемого упоминавшимся ранее свойством SyncRoot
.
Таблица 25.9. Методы, определенные в классе BitArray
Метод -
Описание
public BitArray And(BitArray
value) - Выполняет операцию логического умножения И битов вызывающего объекта и коллекции value. Возвращает коллекцию типа BitArray, содержащую результатpublic bool Get(int
index) - Возвращает значение бита, указываемого по индексу indexpublic BitArray Not() -
Выполняет операцию поразрядного логического отрицания НЕ битов вызывающей коллекции и возвращает коллекцию типа BitArray, содержащую результатpublic BitArray Or(BitArray
value) - Выполняет операцию логического сложения ИЛИ битов вызывающего объекта и коллекции value. Возвращает коллекцию типа BitArray, содержащую результатpublic void Set (int
index,boolvalue) - Устанавливает бит, указываемый по индексу index, равным значению valuepublic void SetAll(bool
value) - Устанавливает все биты равными значению valuepublic BitArray Xor(BitArray
value) - Выполняет логическую операцию исключающее ИЛИ над битами вызывающего объекта и коллекции value. Возвращает коллекцию типа BitArray, со-
В классе BitArray
определяется также собственное свойство, помимо тех, что указаны в интерфейсах, которые в нем реализуются.
public int Length { get; set; }