x = fs[i] ;
if (x != -1) Console.Write(x + ' ') ;
Console.WriteLine ();
//А теперь показать сбои.
Console.WriteLine('ХпСбой с уведомлением об ошибках.'); for(int i=0; i < (fs.Length * 2); i++) {
fs[i] = i * 10; if(fs.ErrFlag)
Console.WriteLine('fs[' + i + '] вне границ');
}
for(int i=0; i < (fs.Length * 2); i++) { N
x = f s [ i ] ;
if(!fs.ErrFlag) Console.Write(x + ' '); else
Console.WriteLine('fs[' + i + '] вне границ');
}
}
}
Вот к какому результату приводит выполнение этой программы.
Скрытый сбой.
О 10 20 30 40 О О О О О
Сбой с уведомлением об ошибках.
fs[5] вне границ
fs[6] вне границ
fs[7] вне границ
fs[8] вне границ
fs[9] вне границ
О 10 20 30 40 fs[5] вне границ
fs[6] вне границ
fs[7] вне границ
fs[8] вне границ
fs[9] вне границ
Индексатор препятствует нарушению границ массива. Внимательно проанализируем каждую часть кода индексатора. Он начинается со следующей строки.
public int this[int index] {
В этой строке кода объявляется индексатор, оперирующий элементами типа int. Ему передается индекс в качестве параметра index. Кроме того, индексатор объявляется открытым (public), что дает возможность использовать этот индексатор в коде за пределами его класса.
Рассмотрим следующий код аксессора get.
get {
if (ok(index) ) {
ErrFlag = false; return a[index];
} else {
ErrFlag = true; return 0;
Аксессор get предотвращает ошибки нарушения границ массива, проверяя в первую очередь, находится
А теперь рассмотрим следующий код аксессора set, предотвращающего ошибки нарушения границ массива.
