Введение в программирование на C# 2.0

Коллекции. Параметризованные классы

Разбить на страницы
Показывать лекцию целиком

Обзор

Пространство имен System.Collections содержит классы и интерфейсы, которые определяют различные коллекции объектов.

Классы
КлассОписание
ArrayList Служит для реализации интерфейса IList с помощью массива с динамическим изменением размера по требованию
BitArray Управляет компактным массивом двоичных значений, представленных логическими величинами, где значение true соответствует 1, а значение false соответствует 0
CaseInsensitiveComparer Проверяет равенство двух объектов без учета регистра строк
CaseInsensitiveHashCodeProvider Предоставляет хэш-код объекта, используя алгоритм хэширования, при котором не учитывается регистр строк
CollectionBase Предоставляет абстрактный (MustInherit в Visual Basic) базовый класс для коллекции со строгим типом
Comparer Проверяет равенство двух объектов с учетом регистра строк
DictionaryBase Предоставляет абстрактный (MustInherit в Visual Basic) базовый класс для коллекции пар "ключ-значение" со строгим типом
Hashtable Предоставляет коллекцию пар "ключ-значение", которые упорядочены по хэш-коду ключа
Queue Предоставляет коллекцию объектов, которая обслуживается по принципу "первым пришел — первым вышел" (FIFO)
ReadOnlyCollectionBase Предоставляет абстрактный (MustInherit в Visual Basic) базовый класс для коллекции со строгим типом, которая доступна только для чтения
SortedList Предоставляет коллекцию пар "ключ-значение", которые упорядочены по ключам. Доступ к парам можно получить по ключу и по индексу
Stack Представляет коллекцию объектов, которая обслуживается по принципу "последним пришел — первым вышел" (LIFO)
Интерфейсы
ИнтерфейсОписание
ICollection Определяет размер, перечислители и методы синхронизации для всех коллекций
IComparer Предоставляет другим приложениям метод для сравнения двух объектов
IDictionary Предоставляет коллекцию пар "ключ-значение"
IDictionaryEnumerator Осуществляет нумерацию элементов словаря
IEnumerable Предоставляет перечислитель, который поддерживает простое перемещение по коллекции
IEnumerator Поддерживает простое перемещение по коллекции
IHashCodeProvider Предоставляет хэш-код объекта, используя пользовательскую хэш-функцию
IList Предоставляет коллекцию объектов, к которым можно получить доступ отдельно, по индексу
Структуры
СтруктураОписание
DictionaryEntry Определяет в словаре пару "ключ-значение", которая может быть задана или получена

Примеры

ArrayList

Неполный перечень свойств и методов приводится ниже.

Конструктор
ArrayList Перегружен. Инициализирует новый экземпляр класса ArrayList
Свойства
Capacity Возвращает или задает число элементов, которое может содержать класс ArrayList
Count Возвращает число элементов, которое в действительности хранится в классе ArrayList
IsFixedSize Возвращает значение, показывающее, имеет ли класс ArrayList фиксированный размер
IsReadOnly Возвращает значение, определяющее, доступен ли класс ArrayList только для чтения
IsSynchronized Возвращает значение, определяющее, является ли доступ к классу ArrayList синхронизированным (потокобезопасным)
Item Возвращает или задает элемент с указанным индексом.

В C# это свойство является индексатором класса ArrayList

Методы
Add Добавляет объект в конец класса ArrayList
AddRange Добавляет элементы интерфейса ICollection в конец класса ArrayList
BinarySearch Перегружен. Использует алгоритм двоичного поиска для нахождения определенного элемента в отсортированном классе ArrayList или в его части
Clear Удаляет все элементы из класса ArrayList
Clone Создает неполную копию класса ArrayList
Contains Определяет, принадлежит ли элемент классу ArrayList
CopyTo Перегружен. Копирует класс ArrayList или его часть в одномерный массив
FixedSize Перегружен. Возвращает обертку списка фиксированного размера, в которой элементы можно изменять, но нельзя добавлять или удалять
GetEnumerator Перегружен. Возвращает перечислитель, который может осуществлять просмотр всех элементов класса ArrayList
GetRange Возвращает класс ArrayList, который представляет собой подмножество элементов в исходном классе ArrayList
IndexOf Перегружен. Возвращает отсчитываемый от нуля индекс первого найденного элемента в классе ArrayList или в его части
Insert Вставляет элемент в класс ArrayList по указанному индексу
InsertRange Вставляет элементы коллекции в класс ArrayList по указанному индексу
LastIndexOf Перегружен. Возвращает отсчитываемый от нуля индекс последнего найденного элемента в классе ArrayList или в его части
Remove Удаляет первый найденный объект из класса ArrayList
RemoveAt Удаляет элемент с указанным индексом из класса ArrayList
RemoveRange Удаляет диапазон элементов из класса ArrayList
Repeat Возвращает класс ArrayList, элементы которого являются копиями указанного значения
Reverse Перегружен. Изменяет порядок элементов в классе ArrayList или в его части на обратный
SetRange Копирует элементы коллекции в диапазон элементов класса ArrayList
Sort Перегружен. Сортирует элементы в классе ArrayList или в его части
ToArray Перегружен. Копирует элементы класса ArrayList в новый массив
TrimToSize Задает значение емкости, равное действительному количеству элементов в классе ArrayList
using System;
 using System.Collections;
 public class SamplesArrayList  {

 public static void Main()  {

 // Создается и инициализируется объект ArrayList.
 ArrayList myAL = new ArrayList();
 myAL.Add("Россия,");
 myAL.Add("вперед");
 myAL.Add("!");

 // Свойства и значения ArrayList.
 Console.WriteLine( "myAL" );
 Console.WriteLine( "\tCount:    {0}", myAL.Count );
 Console.WriteLine( "\tCapacity: {0}", myAL.Capacity );
 Console.Write( "\tValues:" );
 PrintValues( myAL );
 }

 public static void PrintValues( IEnumerable myList )
 {
 // Для эффективной работы с объектом ArrayList
 // создается перечислитель...
 // Перечислитель обеспечивает перебор элементов.
 System.Collections.IEnumerator myEnumerator
          = myList.GetEnumerator(); // Перечислитель для myList
 while (myEnumerator.MoveNext())
  Console.Write( "\t{0}", myEnumerator.Current );
 }
 }

Результат:

myAL
     Count:    3
     Capacity: 16
     Values:    Россия ,   вперед    !

BitArray

Неполный перечень свойств и методов приводится ниже.

Конструкторы
BitArray Перегружен. Инициализирует новый экземпляр класса BitArray, для которого могут быть указаны емкость и начальные значения
Открытые свойства
Count Возвращает число элементов, которое хранится в классе BitArray
IsReadOnly Возвращает значение, определяющее, доступен ли класс BitArray только для чтения
IsSynchronized Возвращает значение, определяющее, является ли доступ к классу BitArray синхронизированным (потокобезопасным)
Item Возвращает или задает значение бита по указанному адресу в классе BitArray

В языке C# это свойство является индексатором класса BitArray

Length Возвращает или задает число элементов в классе BitArray
SyncRoot Возвращает объект, который может быть использован для синхронизации доступа к классу BitArray
Открытые методы
And Выполняет поразрядную операцию логического умножения элементов текущего класса BitArray с соответствующими элементами указанного класса BitArray
Clone Создает неполную копию класса BitArray
CopyTo Копирует целый класс BitArray в совместимый одномерный массив класса Array, начиная с указанного индекса конечного массива
Get Возвращает значение бита по указанному адресу в классе BitArray
GetEnumerator Возвращает перечислитель, который может осуществлять просмотр всех элементов класса BitArray
Not Преобразовывает все двоичные значения в текущем классе BitArray таким образом, чтобы каждому элементу со значением true было присвоено значение false, а каждому элементу со значением false было присвоено значение true
Or Выполняет поразрядную операцию логического сложения элементов текущего класса BitArray с соответствующими элементами указанного класса BitArray
Set Задает указанное значение биту по указанному адресу в классе BitArray
SetAll Задает определенное значение всем битам в классе BitArray
Xor Выполняет поразрядную операцию "исключающее ИЛИ" для элементов текущего класса BitArray и соответствующих элементов указанного класса BitArray

Пример использования:

using System;
 using System.Collections;
 public class SamplesBitArray  {

    public static void Main()  {

       // Creates and initializes several BitArrays.
       BitArray myBA1 = new BitArray( 5 );

       BitArray myBA2 = new BitArray( 5, false );

       byte[] myBytes = new byte[5] { 1, 2, 3, 4, 5 };
       BitArray myBA3 = new BitArray( myBytes );

       bool[] myBools = new bool[5] { true, false, true, true, false };
       BitArray myBA4 = new BitArray( myBools );

       int[]  myInts  = new int[5] { 6, 7, 8, 9, 10 };
       BitArray myBA5 = new BitArray( myInts );

       // Displays the properties and values of the BitArrays.
       Console.WriteLine( "myBA1" );
       Console.WriteLine( "\tCount:    {0}", myBA1.Count );
       Console.WriteLine( "\tLength:   {0}", myBA1.Length );
       Console.WriteLine( "\tValues:" );
       PrintValues( myBA1, 8 );

       Console.WriteLine( "myBA2" );
       Console.WriteLine( "\tCount:    {0}", myBA2.Count );
       Console.WriteLine( "\tLength:   {0}", myBA2.Length );
       Console.WriteLine( "\tValues:" );
       PrintValues( myBA2, 8 );

       Console.WriteLine( "myBA3" );
       Console.WriteLine( "\tCount:    {0}", myBA3.Count );
       Console.WriteLine( "\tLength:   {0}", myBA3.Length );
       Console.WriteLine( "\tValues:" );
       PrintValues( myBA3, 8 );

       Console.WriteLine( "myBA4" );
       Console.WriteLine( "\tCount:    {0}", myBA4.Count );
       Console.WriteLine( "\tLength:   {0}", myBA4.Length );
       Console.WriteLine( "\tValues:" );
       PrintValues( myBA4, 8 );
       Console.WriteLine( "myBA5" );
       Console.WriteLine( "\tCount:    {0}", myBA5.Count );
       Console.WriteLine( "\tLength:   {0}", myBA5.Length );
       Console.WriteLine( "\tValues:" );
       PrintValues( myBA5, 8 );
    }


    public static void PrintValues( IEnumerable myList, int myWidth )
   {
    System.Collections.IEnumerator myEnumerator = myList.GetEnumerator();
    int i = myWidth;
    while ( myEnumerator.MoveNext() ) 
  {
   if ( i <= 0 )
   {
     i = myWidth;
     Console.WriteLine();
    }
          i--;
          Console.Write( "\t{0}", myEnumerator.Current );
    }
       Console.WriteLine();
    }
 }

Результат:

myBA1
     Count:    5
     Length:   5
     Values:
     False    False    False    False    False
 myBA2
     Count:    5
     Length:   5
     Values:
     False    False    False    False    False
 myBA3
     Count:    40
     Length:   40
     Values:
     True	False	False	False	False	False	False	False
     False	True	False	False	False	False	False	False
     True	True	False	False	False	False	False	False
     False	False	True	False	False	False	False	False
     True	False	True	False	False	False	False	False
 myBA4
     Count:    5
     Length:   5
     Values:
     True    False    True    True    False
 myBA5
     Count:    160
     Length:   160
     Values:
     False	True	True	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     True	True	True	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	True	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     True	False	False	True	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	True	False	True	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False

Queue

Неполный перечень свойств и методов.

Конструктор
Queue Перегружен. Инициализирует новый экземпляр класса Queue
Открытые свойства
Count Возвращает число элементов, которое хранится в классе Queue
SyncRoot Получает объект, который может быть использован для синхронизации доступа к классу Queue
Открытые методы
Clear Удаляет все объекты из класса Queue
Clone Создает поверхностную копию класса Queue
Contains Определяет, принадлежит ли элемент классу Queue
CopyTo Копирует элементы класса Queue в существующий одномерный массив класса Array по указанному адресу
Dequeue Удаляет и возвращает объект в начале класса Queue
Enqueue Добавляет объект в конец класса Queue
GetEnumerator Возвращает перечислитель, который может перемещаться по классу Queue
Peek Возвращает объект в начале класса Queue, но не удаляет его
ToArray Копирует элементы класса Queue в новый массив
TrimToSize Задает значение емкости, равное действительному количеству элементов в классе Queue

Пример:

using System;
 using System.Collections;
 public class SamplesQueue
 {

    public static void Main()
   {
       // Creates and initializes a new Queue.
       Queue myQ = new Queue();
       myQ.Enqueue("Россия,");
       myQ.Enqueue("вперед");
       myQ.Enqueue("!");

     // Displays the properties and values of the Queue.
     Console.WriteLine( "myQ" );
     Console.WriteLine( "\tCount:    {0}", myQ.Count );
     Console.Write( "\tValues:" );
     PrintValues( myQ );
    }


  public static void PrintValues( IEnumerable myCollection )
   {
     System.Collections.IEnumerator myEnumerator
                                      = myCollection.GetEnumerator();
       while ( myEnumerator.MoveNext() )
          Console.Write( "\t{0}", myEnumerator.Current );
    }
 }

Результат:

myQ
     Count:    3
     Values:    Россия ,   вперед    !

Stack

Открытые конструкторы
Stack Перегружен. Инициализирует новый экземпляр класса Stack
Открытые свойства
Count Возвращает число элементов, которое хранится в классе Stack
IsSynchronized Возвращает значение, определяющее, является ли доступ к классу Stack синхронизированным (потокобезопасным)
SyncRoot Возвращает объект, который может быть использован для синхронизации доступа к классу Stack
Открытые методы
Clear Удаляет все объекты из класса Stack
Clone Создает неполную копию класса Stack
Contains Определяет, принадлежит ли элемент классу Stack
CopyTo Копирует элементы класса Stack в существующий одномерный массив класса Array, начиная с указанного индекса массива
GetEnumerator Интерфейс IEnumerator для класса Stack
Peek Возвращает самый верхний объект класса Stack, но не удаляет его
Pop Удаляет и возвращает верхний объект класса Stack
Push Вставляет объект в начало класса Stack
Synchronized Возвращает синхронизированную (потокобезопасную) обертку класса Stack
ToArray Копирует элементы класса Stack в новый массив

Класс Stack допускает в качестве действительного значение "пустая ссылка", а также допускает наличие повторяющихся элементов.

Ниже приведен пример создания и инициализации класса Stack и способ вывода его значений:

using System;
 using System.Collections;
 public class SamplesStack  {

  public static void Main() 
  {

  // Creates and initializes a new Stack.
       Stack myStack = new Stack();
       myStack.Push("Hello");
       myStack.Push("world");
       myStack.Push("!");

       // Displays the properties and values of the Stack.
       Console.WriteLine( "myStack" );
       Console.WriteLine( "\tCount:    {0}", myStack.Count );
       Console.Write( "\tValues:" );
       PrintValues( myStack );
    }


  public static void PrintValues( IEnumerable myCollection )
   {
   System.Collections.IEnumerator myEnumerator = myCollection.GetEnumerator();
    while ( myEnumerator.MoveNext() )
    Console.Write( "\t{0}", myEnumerator.Current );
    Console.WriteLine();
   }
 }

Результат:

myStack
     Count:    3
     Values:    !    world    Hello

Перечислитель

Наследует интерфейс IEnumerator, который является основным для всех перечислителей. Поддерживает простое перемещение по коллекции.

Открытые свойства
Current Возвращает текущий элемент коллекции
Открытые методы
MoveNext Перемещает перечислитель на следующий элемент коллекции
Reset Устанавливает перечислитель в исходное положение перед первым элементом коллекции

Перечислитель позволяет считывать (только считывать!) информацию (данные) из коллекции. Перечислители не используются для изменения содержания коллекции. Для этого применяются специфические методы данной коллекции ( Enqueue, Dequeue, Push, Pop ).

Вновь созданный перечислитель размещается перед первым элементом коллекции. Метод Reset возвращает перечислитель обратно в положение перед первым элементом коллекции.

В этом положении обращение к свойству Current приводит к возникновению исключения. Поэтому необходимо вызвать метод MoveNext, чтобы переместить перечислитель на первый элемент коллекции до считывания значения свойства Current.

Свойство Current не меняет своего значения (возвращает ссылку на один и тот же член коллекции), пока не будет вызван метод MoveNext или Reset.

Метод MoveNext обеспечивает изменение значения свойства Current.

Завершение перемещения по коллекции приводит к установке перечислителя после последнего элемента коллекции. При этом вызов метода MoveNext возвращает значение false. Если последний вызов метода MoveNext вернул значение false, обращение к свойству Current приводит к возникновению исключения. Последовательный вызов методов Reset и MoveNext приводит к перемещению перечислителя на первый элемент коллекции.

Перечислитель действителен до тех пор, пока в коллекцию не вносятся изменения. Если в коллекцию вносятся изменения (добавляются или удаляются элементы коллекции), перечислитель становится недействительным, а следующий вызов методов MoveNext или Reset приводит к возникновению исключения InvalidOperationException.

После изменения коллекции в промежутке между вызовом метода MoveNext и новым обращением к свойству Current, свойство Current возвращает текущий элемент коллекции, даже если перечислитель уже недействителен.

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

Страницы:

Обзор

Пространство имен System.Collections содержит классы и интерфейсы, которые определяют различные коллекции объектов.

Классы
КлассОписание
ArrayList Служит для реализации интерфейса IList с помощью массива с динамическим изменением размера по требованию
BitArray Управляет компактным массивом двоичных значений, представленных логическими величинами, где значение true соответствует 1, а значение false соответствует 0
CaseInsensitiveComparer Проверяет равенство двух объектов без учета регистра строк
CaseInsensitiveHashCodeProvider Предоставляет хэш-код объекта, используя алгоритм хэширования, при котором не учитывается регистр строк
CollectionBase Предоставляет абстрактный (MustInherit в Visual Basic) базовый класс для коллекции со строгим типом
Comparer Проверяет равенство двух объектов с учетом регистра строк
DictionaryBase Предоставляет абстрактный (MustInherit в Visual Basic) базовый класс для коллекции пар "ключ-значение" со строгим типом
Hashtable Предоставляет коллекцию пар "ключ-значение", которые упорядочены по хэш-коду ключа
Queue Предоставляет коллекцию объектов, которая обслуживается по принципу "первым пришел — первым вышел" (FIFO)
ReadOnlyCollectionBase Предоставляет абстрактный (MustInherit в Visual Basic) базовый класс для коллекции со строгим типом, которая доступна только для чтения
SortedList Предоставляет коллекцию пар "ключ-значение", которые упорядочены по ключам. Доступ к парам можно получить по ключу и по индексу
Stack Представляет коллекцию объектов, которая обслуживается по принципу "последним пришел — первым вышел" (LIFO)
Интерфейсы
ИнтерфейсОписание
ICollection Определяет размер, перечислители и методы синхронизации для всех коллекций
IComparer Предоставляет другим приложениям метод для сравнения двух объектов
IDictionary Предоставляет коллекцию пар "ключ-значение"
IDictionaryEnumerator Осуществляет нумерацию элементов словаря
IEnumerable Предоставляет перечислитель, который поддерживает простое перемещение по коллекции
IEnumerator Поддерживает простое перемещение по коллекции
IHashCodeProvider Предоставляет хэш-код объекта, используя пользовательскую хэш-функцию
IList Предоставляет коллекцию объектов, к которым можно получить доступ отдельно, по индексу
Структуры
СтруктураОписание
DictionaryEntry Определяет в словаре пару "ключ-значение", которая может быть задана или получена

Примеры

ArrayList

Неполный перечень свойств и методов приводится ниже.

Конструктор
ArrayList Перегружен. Инициализирует новый экземпляр класса ArrayList
Свойства
Capacity Возвращает или задает число элементов, которое может содержать класс ArrayList
Count Возвращает число элементов, которое в действительности хранится в классе ArrayList
IsFixedSize Возвращает значение, показывающее, имеет ли класс ArrayList фиксированный размер
IsReadOnly Возвращает значение, определяющее, доступен ли класс ArrayList только для чтения
IsSynchronized Возвращает значение, определяющее, является ли доступ к классу ArrayList синхронизированным (потокобезопасным)
Item Возвращает или задает элемент с указанным индексом.

В C# это свойство является индексатором класса ArrayList

Методы
Add Добавляет объект в конец класса ArrayList
AddRange Добавляет элементы интерфейса ICollection в конец класса ArrayList
BinarySearch Перегружен. Использует алгоритм двоичного поиска для нахождения определенного элемента в отсортированном классе ArrayList или в его части
Clear Удаляет все элементы из класса ArrayList
Clone Создает неполную копию класса ArrayList
Contains Определяет, принадлежит ли элемент классу ArrayList
CopyTo Перегружен. Копирует класс ArrayList или его часть в одномерный массив
FixedSize Перегружен. Возвращает обертку списка фиксированного размера, в которой элементы можно изменять, но нельзя добавлять или удалять
GetEnumerator Перегружен. Возвращает перечислитель, который может осуществлять просмотр всех элементов класса ArrayList
GetRange Возвращает класс ArrayList, который представляет собой подмножество элементов в исходном классе ArrayList
IndexOf Перегружен. Возвращает отсчитываемый от нуля индекс первого найденного элемента в классе ArrayList или в его части
Insert Вставляет элемент в класс ArrayList по указанному индексу
InsertRange Вставляет элементы коллекции в класс ArrayList по указанному индексу
LastIndexOf Перегружен. Возвращает отсчитываемый от нуля индекс последнего найденного элемента в классе ArrayList или в его части
Remove Удаляет первый найденный объект из класса ArrayList
RemoveAt Удаляет элемент с указанным индексом из класса ArrayList
RemoveRange Удаляет диапазон элементов из класса ArrayList
Repeat Возвращает класс ArrayList, элементы которого являются копиями указанного значения
Reverse Перегружен. Изменяет порядок элементов в классе ArrayList или в его части на обратный
SetRange Копирует элементы коллекции в диапазон элементов класса ArrayList
Sort Перегружен. Сортирует элементы в классе ArrayList или в его части
ToArray Перегружен. Копирует элементы класса ArrayList в новый массив
TrimToSize Задает значение емкости, равное действительному количеству элементов в классе ArrayList
using System;
 using System.Collections;
 public class SamplesArrayList  {

 public static void Main()  {

 // Создается и инициализируется объект ArrayList.
 ArrayList myAL = new ArrayList();
 myAL.Add("Россия,");
 myAL.Add("вперед");
 myAL.Add("!");

 // Свойства и значения ArrayList.
 Console.WriteLine( "myAL" );
 Console.WriteLine( "\tCount:    {0}", myAL.Count );
 Console.WriteLine( "\tCapacity: {0}", myAL.Capacity );
 Console.Write( "\tValues:" );
 PrintValues( myAL );
 }

 public static void PrintValues( IEnumerable myList )
 {
 // Для эффективной работы с объектом ArrayList
 // создается перечислитель...
 // Перечислитель обеспечивает перебор элементов.
 System.Collections.IEnumerator myEnumerator
          = myList.GetEnumerator(); // Перечислитель для myList
 while (myEnumerator.MoveNext())
  Console.Write( "\t{0}", myEnumerator.Current );
 }
 }

Результат:

myAL
     Count:    3
     Capacity: 16
     Values:    Россия ,   вперед    !

BitArray

Неполный перечень свойств и методов приводится ниже.

Конструкторы
BitArray Перегружен. Инициализирует новый экземпляр класса BitArray, для которого могут быть указаны емкость и начальные значения
Открытые свойства
Count Возвращает число элементов, которое хранится в классе BitArray
IsReadOnly Возвращает значение, определяющее, доступен ли класс BitArray только для чтения
IsSynchronized Возвращает значение, определяющее, является ли доступ к классу BitArray синхронизированным (потокобезопасным)
Item Возвращает или задает значение бита по указанному адресу в классе BitArray

В языке C# это свойство является индексатором класса BitArray

Length Возвращает или задает число элементов в классе BitArray
SyncRoot Возвращает объект, который может быть использован для синхронизации доступа к классу BitArray
Открытые методы
And Выполняет поразрядную операцию логического умножения элементов текущего класса BitArray с соответствующими элементами указанного класса BitArray
Clone Создает неполную копию класса BitArray
CopyTo Копирует целый класс BitArray в совместимый одномерный массив класса Array, начиная с указанного индекса конечного массива
Get Возвращает значение бита по указанному адресу в классе BitArray
GetEnumerator Возвращает перечислитель, который может осуществлять просмотр всех элементов класса BitArray
Not Преобразовывает все двоичные значения в текущем классе BitArray таким образом, чтобы каждому элементу со значением true было присвоено значение false, а каждому элементу со значением false было присвоено значение true
Or Выполняет поразрядную операцию логического сложения элементов текущего класса BitArray с соответствующими элементами указанного класса BitArray
Set Задает указанное значение биту по указанному адресу в классе BitArray
SetAll Задает определенное значение всем битам в классе BitArray
Xor Выполняет поразрядную операцию "исключающее ИЛИ" для элементов текущего класса BitArray и соответствующих элементов указанного класса BitArray

Пример использования:

using System;
 using System.Collections;
 public class SamplesBitArray  {

    public static void Main()  {

       // Creates and initializes several BitArrays.
       BitArray myBA1 = new BitArray( 5 );

       BitArray myBA2 = new BitArray( 5, false );

       byte[] myBytes = new byte[5] { 1, 2, 3, 4, 5 };
       BitArray myBA3 = new BitArray( myBytes );

       bool[] myBools = new bool[5] { true, false, true, true, false };
       BitArray myBA4 = new BitArray( myBools );

       int[]  myInts  = new int[5] { 6, 7, 8, 9, 10 };
       BitArray myBA5 = new BitArray( myInts );

       // Displays the properties and values of the BitArrays.
       Console.WriteLine( "myBA1" );
       Console.WriteLine( "\tCount:    {0}", myBA1.Count );
       Console.WriteLine( "\tLength:   {0}", myBA1.Length );
       Console.WriteLine( "\tValues:" );
       PrintValues( myBA1, 8 );

       Console.WriteLine( "myBA2" );
       Console.WriteLine( "\tCount:    {0}", myBA2.Count );
       Console.WriteLine( "\tLength:   {0}", myBA2.Length );
       Console.WriteLine( "\tValues:" );
       PrintValues( myBA2, 8 );

       Console.WriteLine( "myBA3" );
       Console.WriteLine( "\tCount:    {0}", myBA3.Count );
       Console.WriteLine( "\tLength:   {0}", myBA3.Length );
       Console.WriteLine( "\tValues:" );
       PrintValues( myBA3, 8 );

       Console.WriteLine( "myBA4" );
       Console.WriteLine( "\tCount:    {0}", myBA4.Count );
       Console.WriteLine( "\tLength:   {0}", myBA4.Length );
       Console.WriteLine( "\tValues:" );
       PrintValues( myBA4, 8 );
       Console.WriteLine( "myBA5" );
       Console.WriteLine( "\tCount:    {0}", myBA5.Count );
       Console.WriteLine( "\tLength:   {0}", myBA5.Length );
       Console.WriteLine( "\tValues:" );
       PrintValues( myBA5, 8 );
    }


    public static void PrintValues( IEnumerable myList, int myWidth )
   {
    System.Collections.IEnumerator myEnumerator = myList.GetEnumerator();
    int i = myWidth;
    while ( myEnumerator.MoveNext() ) 
  {
   if ( i <= 0 )
   {
     i = myWidth;
     Console.WriteLine();
    }
          i--;
          Console.Write( "\t{0}", myEnumerator.Current );
    }
       Console.WriteLine();
    }
 }

Результат:

myBA1
     Count:    5
     Length:   5
     Values:
     False    False    False    False    False
 myBA2
     Count:    5
     Length:   5
     Values:
     False    False    False    False    False
 myBA3
     Count:    40
     Length:   40
     Values:
     True	False	False	False	False	False	False	False
     False	True	False	False	False	False	False	False
     True	True	False	False	False	False	False	False
     False	False	True	False	False	False	False	False
     True	False	True	False	False	False	False	False
 myBA4
     Count:    5
     Length:   5
     Values:
     True    False    True    True    False
 myBA5
     Count:    160
     Length:   160
     Values:
     False	True	True	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     True	True	True	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	True	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     True	False	False	True	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	True	False	True	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False
     False	False	False	False	False	False	False	False

Queue

Неполный перечень свойств и методов.

Конструктор
Queue Перегружен. Инициализирует новый экземпляр класса Queue
Открытые свойства
Count Возвращает число элементов, которое хранится в классе Queue
SyncRoot Получает объект, который может быть использован для синхронизации доступа к классу Queue
Открытые методы
Clear Удаляет все объекты из класса Queue
Clone Создает поверхностную копию класса Queue
Contains Определяет, принадлежит ли элемент классу Queue
CopyTo Копирует элементы класса Queue в существующий одномерный массив класса Array по указанному адресу
Dequeue Удаляет и возвращает объект в начале класса Queue
Enqueue Добавляет объект в конец класса Queue
GetEnumerator Возвращает перечислитель, который может перемещаться по классу Queue
Peek Возвращает объект в начале класса Queue, но не удаляет его
ToArray Копирует элементы класса Queue в новый массив
TrimToSize Задает значение емкости, равное действительному количеству элементов в классе Queue

Пример:

using System;
 using System.Collections;
 public class SamplesQueue
 {

    public static void Main()
   {
       // Creates and initializes a new Queue.
       Queue myQ = new Queue();
       myQ.Enqueue("Россия,");
       myQ.Enqueue("вперед");
       myQ.Enqueue("!");

     // Displays the properties and values of the Queue.
     Console.WriteLine( "myQ" );
     Console.WriteLine( "\tCount:    {0}", myQ.Count );
     Console.Write( "\tValues:" );
     PrintValues( myQ );
    }


  public static void PrintValues( IEnumerable myCollection )
   {
     System.Collections.IEnumerator myEnumerator
                                      = myCollection.GetEnumerator();
       while ( myEnumerator.MoveNext() )
          Console.Write( "\t{0}", myEnumerator.Current );
    }
 }

Результат:

myQ
     Count:    3
     Values:    Россия ,   вперед    !

Stack

Открытые конструкторы
Stack Перегружен. Инициализирует новый экземпляр класса Stack
Открытые свойства
Count Возвращает число элементов, которое хранится в классе Stack
IsSynchronized Возвращает значение, определяющее, является ли доступ к классу Stack синхронизированным (потокобезопасным)
SyncRoot Возвращает объект, который может быть использован для синхронизации доступа к классу Stack
Открытые методы
Clear Удаляет все объекты из класса Stack
Clone Создает неполную копию класса Stack
Contains Определяет, принадлежит ли элемент классу Stack
CopyTo Копирует элементы класса Stack в существующий одномерный массив класса Array, начиная с указанного индекса массива
GetEnumerator Интерфейс IEnumerator для класса Stack
Peek Возвращает самый верхний объект класса Stack, но не удаляет его
Pop Удаляет и возвращает верхний объект класса Stack
Push Вставляет объект в начало класса Stack
Synchronized Возвращает синхронизированную (потокобезопасную) обертку класса Stack
ToArray Копирует элементы класса Stack в новый массив

Класс Stack допускает в качестве действительного значение "пустая ссылка", а также допускает наличие повторяющихся элементов.

Ниже приведен пример создания и инициализации класса Stack и способ вывода его значений:

using System;
 using System.Collections;
 public class SamplesStack  {

  public static void Main() 
  {

  // Creates and initializes a new Stack.
       Stack myStack = new Stack();
       myStack.Push("Hello");
       myStack.Push("world");
       myStack.Push("!");

       // Displays the properties and values of the Stack.
       Console.WriteLine( "myStack" );
       Console.WriteLine( "\tCount:    {0}", myStack.Count );
       Console.Write( "\tValues:" );
       PrintValues( myStack );
    }


  public static void PrintValues( IEnumerable myCollection )
   {
   System.Collections.IEnumerator myEnumerator = myCollection.GetEnumerator();
    while ( myEnumerator.MoveNext() )
    Console.Write( "\t{0}", myEnumerator.Current );
    Console.WriteLine();
   }
 }

Результат:

myStack
     Count:    3
     Values:    !    world    Hello

Перечислитель

Наследует интерфейс IEnumerator, который является основным для всех перечислителей. Поддерживает простое перемещение по коллекции.

Открытые свойства
Current Возвращает текущий элемент коллекции
Открытые методы
MoveNext Перемещает перечислитель на следующий элемент коллекции
Reset Устанавливает перечислитель в исходное положение перед первым элементом коллекции

Перечислитель позволяет считывать (только считывать!) информацию (данные) из коллекции. Перечислители не используются для изменения содержания коллекции. Для этого применяются специфические методы данной коллекции ( Enqueue, Dequeue, Push, Pop ).

Вновь созданный перечислитель размещается перед первым элементом коллекции. Метод Reset возвращает перечислитель обратно в положение перед первым элементом коллекции.

В этом положении обращение к свойству Current приводит к возникновению исключения. Поэтому необходимо вызвать метод MoveNext, чтобы переместить перечислитель на первый элемент коллекции до считывания значения свойства Current.

Свойство Current не меняет своего значения (возвращает ссылку на один и тот же член коллекции), пока не будет вызван метод MoveNext или Reset.

Метод MoveNext обеспечивает изменение значения свойства Current.

Завершение перемещения по коллекции приводит к установке перечислителя после последнего элемента коллекции. При этом вызов метода MoveNext возвращает значение false. Если последний вызов метода MoveNext вернул значение false, обращение к свойству Current приводит к возникновению исключения. Последовательный вызов методов Reset и MoveNext приводит к перемещению перечислителя на первый элемент коллекции.

Перечислитель действителен до тех пор, пока в коллекцию не вносятся изменения. Если в коллекцию вносятся изменения (добавляются или удаляются элементы коллекции), перечислитель становится недействительным, а следующий вызов методов MoveNext или Reset приводит к возникновению исключения InvalidOperationException.

После изменения коллекции в промежутке между вызовом метода MoveNext и новым обращением к свойству Current, свойство Current возвращает текущий элемент коллекции, даже если перечислитель уже недействителен.

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

Вернуться к учебному плану