Страница 456 из 502
<b>public BitArray(int length, bool defaultValue)</b>
В данном случае все биты в коллекции инициализируются значением defaultValue, передаваемым конструктору в качестве параметра.
И наконец, новую коллекцию типа BitArray можно создать из уже существующей, используя следующий конструктор.
<b>public BitArray(BitArray bits)</b>
Вновь сконструированный объект будет содержать такое же количество битов, как и в указываемой коллекции 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) - Возвращает значение бита, указываемого по индексу index
public BitArray Not() - Выполняет операцию поразрядного логического отрицания НЕ битов вызывающей коллекции и возвращает коллекцию типа BitArray, содержащую результат
public BitArray Or(BitArray value) - Выполняет операцию логического сложения ИЛИ битов вызывающего объекта и коллекции value. Возвращает коллекцию типа BitArray, содержащую результат
public void Set (int index, bool value) - Устанавливает бит, указываемый по индексу index, равным значению value
public void SetAll(bool value) - Устанавливает все биты равными значению value
public BitArray Xor(BitArray value) - Выполняет логическую операцию исключающее ИЛИ над битами вызывающего объекта и коллекции value. Возвращает коллекцию типа BitArray, со-
В классе BitArray определяется также собственное свойство, помимо тех, что указаны в интерфейсах, которые в нем реализуются.
<b>public int Length { get; set; }</b>
Свойство Length позволяет установить или получить количество битов в коллекции. Следовательно, оно возвращает такое же значение, как и стандартное свойство Count, определяемое для всех коллекций. В отличие от свойства Count, свойство Length доступно не только для чтения, но и для записи, а значит, с его помощью можно изменить размер коллекции типа BitArray. Так, при сокращении коллекции типа BitArray лишние биты усекаются, начиная со старшего разряда. А при расширении коллекции типа BitArray дополнительные биты, имеющие логическое значение false, вводятся в коллекцию, начиная с того же старшего разряда.
Кроме того, в классе BitArray определяется следующий индексатор.
<b>public bool this[int index] { get; set; }</b>
С помощью этого индексатора можно получать или устанавливать значение элемента. В приведенном ниже примере демонстрируется применение класса BitArray.
<b>// Продемонстрировать применение класса BitArray.</b>
<b>using System;</b>
<b>using System.Collections;</b>
<b>class BADemo {</b>
<b> public static void ShowBits(string rem,</b>
<b> BitArray bits) {</b>
<b> Console.WriteLine(rem);</b>
<b> for(int i=0; i < bits.Count; i++)</b>
<b> Console.Write("{0, -6} ", bits[i]);</b>
<b> Console.WriteLine ("n");</b>
<b> }</b>
<b> static void Main() {</b>
<b> BitArray ba = new BitArray(8);</b>
<b> byte[] b = { 67 };</b>
<b> BitArray ba2 = new BitArray(b);</b>
<b> ShowBits("Исходное содержимое коллекции bа:", ba);</b>
<b> ba = ba.Not();</b>
<b> ShowBits("Содержимое коллекции bа после логической операции NOT:", ba);</b>
<b> ShowBits("Содержимое коллекции bа2:", ba2);</b>
<b> BitArray baЗ = ba.Xor(ba2);</b>
<b> ShowBits("Результат логической операции ba XOR bа2:", baЗ);</b>
<b> }</b>
<b>}</b>
Эта программа дает следующий результат.
<b>Исходное содержимое коллекции bа:</b>
<b>False False False False False False False False</b>