int[] a; // ссылка на базовый массив int lowerBound; // наименьший индекс int upperBound; // наибольший индекс
// Автоматически реализуемое и доступное только для чтения свойство Length, public int Length { get; private set; }
// Построить массив по заданному размеру public RangeArray(int low, int high) { high+ +;
if(high <= low) {
throw new RangeArrayException('Нижний индекс не меньше верхнего.');
}
а = new int[high - low];
Length = high - low;
lowerBound = low; upperBound = —high;
}
// Это индексатор для класса RangeArray. public int this[int index] {
// Это аксессор get. get {
if(ok(index)) {
return a[index - lowerBound];
} else {
throw new RangeArrayException('Ошибка нарушения границ.');
}
}
// Это аксессор set. set {
if(ok(index)) {
a[index - lowerBound] = value;
}
else throw new RangeArrayException('Ошибка нарушения границ.'); }
}
// Возвратить логическое значение true, если // индекс находится в установленных границах, private bool ok(int index) {
if(index >= lowerBound & index <= upperBound) return true; return false;
}
}
// Продемонстрировать применение массива с произвольно // задаваемыми пределами индексирования, class RangeArrayDemo { static void Main() { try {
RangeArray ra = new RangeArray(-5, 5);
RangeArray ra2 = new RangeArray(1, 10);
i
// Использовать объект га в качестве массива.
Console.WriteLine('Длина массива га: и- + га.Length); for(int i = -5; i <= 5; i++) ra[i] = i;
Console.Write('Содержимое массива ra: '); for (int i = -5; i <= 5; i++)
Console.Write(ra[i] + ' ');
Console.WriteLine(' ');
// Использовать объект ra2 в качестве массива.
Console.WriteLine('Длина массива га2: ' + ra2.Length); for (int i = 1; i <= 10; i++) ra2[i] = i;
Console.Write('Длина массива ra2: '); for (int i = 1; i <= 10; i++)
Console.Write(ra2[i] + ' ');
Console.WriteLine(' ') ;
} catch (RangeArrayException exc) {
Console.WriteLine(exc);
}
// А теперь продемонстрировать обработку некоторых ошибок.
