При конструировании объекту классаRangeArrayпередается нижняя граница массива в качестве параметраlow,а верхняя граница — в качестве параметраhigh.Затем значение параметраhighинкрементируется, поскольку пределы индексирования массива изменяются отlowдоhighвключительно. Далее выполняется следующая проверка: является ли верхний индекс больше нижнего индекса. Если это не так, то выдается сообщение об ошибке и создается массив, состоящий из одного элемента. После этого для массива распределяется память, а ссылка на него присваивается переменнойа.Затем свойствоLengthустанавливается равным числу элементов массива. И наконец, устанавливаются переменныеlowerBoundиupperBound.

Далее в классе RangeArray реализуется его индексатор, как показано ниже.

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

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

if(ok(index) )    {

Error = false;

return a[index - lowerBound];

} else {

Error = true; return 0;

}

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

if(ok(index))    {

a[index - lowerBound] = value;

Error = false;

}

else Error = true;

}

}

Этот индексатор подобен тому, что использовался в классеFailSof tArray,за одним существенным исключением. Обратите внимание на следующее выражение, в котором индексируется массива.

index - lowerBound

В этом выражении индекс, передаваемый в качестве параметраindex,преобразуется в индекс с отсчетом от нуля, пригодный для индексирования массиваа.Данное выражение действует при любом значении переменнойlowerBound:положительном, отрицательном или нулевом.

Ниже приведен методok ().

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

if(index >= lowerBound & index <= upperBound) return true; return false;

}

Этот метод аналогичен использовавшемуся в классеFailSof tArray,за исключением того, что в нем контроль границ массива осуществляется по значениям переменныхlowerBoundиupperBound.

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

ГЛАВА 11 Наследование

Перейти на страницу:

Похожие книги