В частности, индексаторы предоставляют механизм для индексирования объектов подобно массивам, а свойства — рациональный способ управления доступом к данным экземпляра класса. Эти члены класса тесно связаны друг с другом, поскольку оба опираются на еще одно доступное в C# средство: аксессор.
Индексаторы
Как вам должно быть уже известно, индексирование массива осуществляется с помощью оператора [ ].Длясоздаваемых классов можно определить оператор [ ], но с этой целью вместо операторного метода создается индексатор, который позволяет индексировать объект, подобно массиву. Индексаторы применяются, главным образом, в качестве средства, поддерживающего создание специализированных массивов, на которые накладывается одно или несколько ограничений. Тем не менее индексаторымогут служить практически любым целям,для которыхвыгодным оказывается такой же синтаксис, как и у массивов. Индексаторы могут быть одно- или многомерными.
Рассмотрим сначала одномерные индексаторы.
Создание одномерных индексаторов
Ниже приведена общая форма одномерного индексатора:
тип_элементаthis[intиндекс] {
// Аксессор для получения данных, get {
// Возврат значения, которое определяетиндекс.
}
IIАксессор для установки данных, set {
// Установка значения, которое определяетиндекс.
}
}
гдетип_элементаобозначает конкретный тип элемента индексатора. Следовательно, у каждого элемента, доступного с помощью индексатора, должен быть определенныйтип_элемента.Этот тип соответствует типу элемента массива. Параметриндексполучает конкретный индекс элемента, к которому осуществляется доступ. Формально этот параметр совсем не обязательно должен иметь типint,но поскольку индексаторы, как правило, применяются для индексирования массивов, то чаще всего используется целочисленный тип данного параметра.
В теле индексатора определены два аксессора (т.е. средства доступа к данным):getиset.Аксессор подобен методу, за исключением того, что в нем не объявляется тип возвращаемого значения или параметры. Аксессоры вызываются автоматически при использовании индексатора, и оба получают:индексв качестве параметра. Так, если индексатор указывается в левой части оператора присваивания, то вызывается аксессорsetи устанавливается элемент, на который указывает параметриндекс.В противном случае вызывается аксессорgetи возвращается значение, соответствующее параметруиндекс.Кроме того, аксессорsetполучает неявный параметрvalue,содержащий значение, присваиваемое по указанному индексу.