Добавить в цитаты Настройки чтения

Страница 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 &lt; bits.Count; i++)</b>

<b>    Console.Write(&quot;{0, -6} &quot;, bits[i]);</b>

<b>    Console.WriteLine (&quot;n&quot;);</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(&quot;Исходное содержимое коллекции bа:&quot;, ba);</b>

<b>    ba = ba.Not();</b>

<b>    ShowBits(&quot;Содержимое коллекции bа после логической операции NOT:&quot;, ba);</b>

<b>    ShowBits(&quot;Содержимое коллекции bа2:&quot;, ba2);</b>

<b>    BitArray baЗ = ba.Xor(ba2);</b>

<b>    ShowBits(&quot;Результат логической операции ba XOR bа2:&quot;, baЗ);</b>

<b>  }</b>

<b>}</b>

Эта программа дает следующий результат.

<b>Исходное содержимое коллекции bа:</b>

<b>False  False  False  False  False  False  False  False</b>