Console.Write("Содержимое массива гаЗ: "); for (int i = -20; i <= -12; i++)
Console.Write(ra3[i] + " ");
Console.WriteLine("\n") ;
}
}
При выполнении этого кода получается следующий результат.
Длина массива га: 11
Содержимое массива га: -5-4-3-2-1012345 Длина массива га2: 10
Содержимое массива га2: 12345678910 Длина массива гаЗ: 9
Содержимое массива гаЗ: -20 -19 -18 -17 -16 -15 -14 -13 -12
Как следует из результата выполнения приведенного выше кода, объекты типаRangeArrayможно индексировать в качестве массивов, начиная с любой точки отсчета, а не только с нуля. Рассмотрим подробнее саму реализацию классаRangeArray.
В начале классаRangeArrayобъявляются следующие закрытые переменные экземпляра.
// Закрытые данные.
int[] а; // ссылка на базовый массив int lowerBound; // наименьший индекс •int upperBound; // наибольший индекс
Переменнаяаслужит для обращения к базовому массиву по ссылке. Память для него распределяется конструктором классаRangeArray.Нижняя граница индексирования массива хранится в переменнойlowerBound,а верхняя граница — в переменнойupperBound.
Далее объявляются автоматически реализуемые свойстваLengthиError.
// Автоматически реализуемое и доступное только для чтения свойство Length, public int Length { get; private set; }
// Автоматически реализуемое и доступное только для чтения свойство Error, public bool Error { get; private set; }
Обратите внимание на то, что в обоих свойства аксессорsetобозначен какprivate.Как пояснялось выше, такое объявление автоматически реализуемого свойства, по существу, делает его доступным только для чтения.
Ниже приведен конструктор классаRangeArray.
// Построить массив по заданному размеру, public RangeArray(int low, int high) { high++;
if(high <= low) {
Console.WriteLine("Неверные индексы");
high = 1; // создать для надежности минимально допустимый массив
low = 0;
}
а = new int[high - low];
Length = high - low;
lowerBound = low; upperBound = —high;
}