Создание индексаторов
Индексатор позволяет работать с классом или структурой таким образом, как если бы это были массивы. Индексация класса выполняется по индексу, указываемому как параметр. Иногда классы, используемые как индексаторы, называют классами-индексаторами.
Объявление индексатора может иметь следующее формальное описание:
атрибуты] [модификаторы] тип 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 { } }