должен иметь тип int, но поскольку индексаторы, как правило, применяются для индексирования массивов, то чаще всего используется целочисленный тип данного параметра.
В теле индексатора определены два аксессора (т.е. средства доступа к данным): get и set. Аксессор подобен методу, за исключением того, что в нем не объявляется тип возвращаемого значения или параметры. Аксессоры вызываются автоматически при использовании индексатора, и оба получают
Преимущество индексатора заключается, в частности, в том, что он позволяет полностью управлять доступом к массиву, избегая нежелательного доступа. В качестве примера рассмотрим программу, в которой создается класс Fail So f t Array, реализующий массив для выявления ошибок нарушения границ массива, а следовательно, для предотвращения исключительных ситуаций, возникающих во время выполнения в связи с индексированием массива за его границами. Для этого массив инкапсулируется в качестве закрытого члена класса, а доступ к нему осуществляется только с помощью индексатора. При таком подходе исключается любая попытка получить доступ к массиву за его границами, причем эта попытка пресекается без катастрофических последствий для программы. А поскольку в классе FailSof tArray используется индексатор, то к массиву можно обращаться с помощью обычной формы записи.
// Использовать индексатор для создания отказоустойчивого массива.
using System;
class FailSoftArray {
int[] a; // ссылка на базовый массив
public bool ErrFlag; // обозначает результат последней операции
// Построить массив заданного размера, public FailSoftArray(int size) { a = new irrt [size] ;
Length = size;
}
// Это индексатор для класса FailSoftArray. public int this[int index] {
// Это аксессор get. get {
if (ok(index)) {
ErrFlag = false; return a[index];
} else {
ErrFlag = true; return 0;
}
}
// Это аксессор set. set {
. if(ok(index)) {
a[index] = value;
ErrFlag = false;
}
else ErrFlag = true;
}
}
// Возвратить логическое значение true, если // индекс находится в установленных границах, private bool ok(int index) {
if(index >= 0 & index < Length) return true; return false;
}
}
// Продемонстрировать применение отказоустойчивого массива, class FSDemo {
static void Main() {
FailSoftArray fs = new FailSoftArray(5); int x;
// Выявить скрытые сбои.
Console.WriteLine('Скрытый сбой.'); for(int i=0; i < (fs.Length * 2); i++) fs[i] = i*10;
for(int i=0; i < (fs.Length * 2); i++) {
