get; private set; }

// Это индексатор для массива FailSoftArray. public int this[int index] {

// Это аксессор get. get {

if(ok(index) )    {

Error = false; return a[index];

} else {

Error '= true; return 0;

}

}

// Это аксессор set. set {

if(ok(index))    {

a[index] = value;

Error = false;

}

else Error = true;

}

}

// Возвратить логическое значение true, если // индекс находится в установленных границах, private bool ok(int index) {

if(index >= 0 & index < Length) return true; return false;

}

}

// Продемонстрировать применение усовершенствованного // отказоустойчивого массива, class FinalFSDemo { static void Main() {

FailSoftArray fs = new FailSoftArray(5);

// Использовать свойство Error, for(int i=0; i < fs.Length + 1; i++)    {

fs[i] = i * 10; if(fs.Error)

Console.WriteLine('Ошибка в индексе ' + i);

}

}

}

Этот вариант класса FailSoftArray действует таким же образом, как и предыдущий, но в нем отсутствуют поддерживающие поля, объявляемые явно.

На применение модификаторов доступа в аксессорах накладываются следующие ограничения. Во-первых, действию модификатора доступа подлежит только один аксессор: set или get, но не оба сразу. Во-вторых, модификатор должен обеспечивать более ограниченный доступ к аксессору, чем доступ на уровне свойства или индексатора. И наконец, модификатор доступа нельзя использовать при объявлении аксессора в интерфейсе или же при реализации аксессора, указываемого в интерфейсе. (Подробнее об интерфейсах речь пойдет в главе 12.)

Применение индексаторов и свойств

В предыдущих примерах программ был продемонстрирован основной принцип действия индексаторов и свойств, но их возможности не были раскрыты в полную силу. Поэтому в завершение этой главы обратимся к примеру класса RangeArray, в котором индексаторы и свойства используются для создания типа массива с пределами индексирования, определяемыми пользователем.

Как вам должно быть уже известно, индексирование всех массивов в C# начинается с нуля. Но в некоторых приложениях индексирование массива удобнее начинать с любой произвольной точки отсчета: с 1 или даже с отрицательного числа, например от -5 и до 5. Рассматриваемый здесь класс RangeArray разработан таким образом, чтобы допускать подобного рода индексирование массйвов.

Используя класс RangeArray, можно написать следующий фрагмент кода.

RangeArray га = new RangeArray(-5, 10); // массив'с индексами от -5 до 10 for(int i=-5; i <= 10; i++) ra[i] = i; // индексирование массива от -5 до

10

Нетрудно догадаться, что в первой строке этого кода конструируется объект класса RangeArray с пределами индексирования массива от - 5 до 10 включительно. Первый аргумент обозначает начальный индекс, а второй —

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату