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

       

Создание индексаторов


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

Объявление индексатора может иметь следующее формальное описание:

атрибуты] [модификаторы] тип this [[атрибуты] тип_параметра идентификатор_параметра .,...] {объявление аксессоров}

Индексатор должен иметь как минимум один параметр. Тип и идентификатор параметра указываются в квадратных скобках после ключевого слова this.

Среда проектирования Visual Studio.NET позволяет использовать мастер создания индексатора: для этого в окне Class View следует выделить имя класса и выполнить команду контекстного меню Add|Add Indexer.

Диалог C# Indexer Wizard (рис. 17.1) позволяет определить параметры создаваемого индексатора.


Рис. 17.1.  Диалог C# Indexer Wizard

В поле Indexer Аcess указывается модификатор доступа для индексатора. Это могут быть следующие модификаторы:

  • public - доступ не ограничен;
  • protected - доступ ограничен только наследуемыми классами;
  • internal - доступ ограничен рамками текущего проекта;
  • private - доступ ограничен рамками данного класса;
  • protected internal - ограничение доступа наследуемыми классами текущего проекта.

В поле Indexer Type определяется тип массива, используемого для индексатора. В качестве типа индексатора может быть выбран любой из следующих типов:

  • bool - логическое значение true или false;
  • decimal - 128-битовый тип данных (1,0 * 10-28 до 7,9 * 1028);
  • int - 32-битовое целочисленное значение;
  • sbyte - знаковое 8-битовое целое (от - 128 до 127);
  • uint - беззнаковое 32-битовое целочисленное значение (от 0 до 4 294 967 295);
  • byte;
  • double - 64-битовый тип данных (±5,0 * 10-324 до ±1,7 * 10308);
  • long - 64-битовое целочисленное значение;
  • string;
  • ulong;
  • char;
  • float- 32-битовый тип данных (±1.5 * 10-45 до ±3.4 * 1038);
  • object;
  • short;
  • ushort.

Поле Parameter Name содержит имя параметра.

На панели Indexer Modifiers можно выбрать одну из следующих опций:

  • None - индексатор не содержит дополнительных модификаторов;
  • Virtual - реализация индексатора может быть переопределена в наследуемых классах, для индексатора указывается ключевое слово virtual;
  • Abstract - индексатор является членом абстрактного класса, для индексатора указывается ключевое слово abstract.

Ключевое слово this используется как имя индексатора, так как с классом, содержащим индексатор, можно манипулировать как с массивом.

Например:

public int this[int ind1] // Индексатор типа int // с одним параметром типа int - ind1 { get { return 0; } set { } }



Содержание раздела