должен иметь тип int, но поскольку индексаторы, как правило, применяются для индексирования массивов, то чаще всего используется целочисленный тип данного параметра.

В теле индексатора определены два аксессора (т.е. средства доступа к данным): get и set. Аксессор подобен методу, за исключением того, что в нем не объявляется тип возвращаемого значения или параметры. Аксессоры вызываются автоматически при использовании индексатора, и оба получают:индекс в качестве параметра. Так, если индексатор указывается в левой части оператора присваивания, то вызывается аксессор set и устанавливается элемент, на который указывает параметр индекс. В противном случае вызывается аксессор get и возвращается значение, соответствующее параметру индекс. Кроме того, аксессор set получает неявный параметр value, содержащий значение, присваиваемое по указанному индексу.

Преимущество индексатора заключается, в частности, в том, что он позволяет полностью управлять доступом к массиву, избегая нежелательного доступа. В качестве примера рассмотрим программу, в которой создается класс 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++)    {

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

0

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

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