Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C# 4.0 ΠΏΠΎΠ»Π½ΠΎΠ΅ руководство - 2011Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 75

Автор Π“Π΅Ρ€Π±Π΅Ρ€Ρ‚ Π¨ΠΈΠ»Π΄Ρ‚

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ индСксаторов ΠΈ свойств

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π±Ρ‹Π» продСмонстрирован основной ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ дСйствия индСксаторов ΠΈ свойств, Π½ΠΎ ΠΈΡ… возмоТности Π½Π΅ Π±Ρ‹Π»ΠΈ раскрыты Π² ΠΏΠΎΠ»Π½ΡƒΡŽ силу. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ этой Π³Π»Π°Π²Ρ‹ обратимся ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ класса 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 Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ индСкс, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ индСкс. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π³Π° Π±ΡƒΠ΄Π΅Ρ‚ сконструирован, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ проиндСксирован ΠΊΠ°ΠΊ массив Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΡ‚ -5 Π΄ΠΎ 10.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ класс RangeArray вмСстС с классом RangeArrayDemo, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ дСмонстрируСтся индСксированиС массива Π² Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ…. Класс RangeArray Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ массивы Ρ‚ΠΈΠΏΠ° int, Π½ΠΎ ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ этот Ρ‚ΠΈΠΏ Π½Π° любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

/* Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ класс со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ индСксирования массива. Класс RangeArray допускаСт индСксированиС массива с любого значСния, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с нуля. ΠŸΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса RangeArray ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ индСксы. ДопускаСтся Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ индСксы. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массивы, индСксируСмыС ΠΎΡ‚ -5 Π΄ΠΎ 5, ΠΎΡ‚ 1 Π΄ΠΎ 10 ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΎΡ‚ 50 Π΄ΠΎ 56. */

using System;

class RangeArray {

// Π—Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

int[] Π°; // ссылка Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ массив int lowerBound; // наимСньший индСкс int upperBound; // наибольший индСкс

// АвтоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠ΅ ΠΈ доступноС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния свойство Length, public int Length { get; private set; }

// АвтоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠ΅ ΠΈ доступноС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния свойство Error, public bool Error { get; private set; }

// ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ массив ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ, 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;

// Π­Ρ‚ΠΎ индСксатор для класса 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;

}

}

// Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ссли // индСкс находится Π² установлСнных Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ…, private bool ok(int index) {

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

}

}

// ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ массива с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ // Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ индСксирования, class RangeArrayDemo { static void Main() {

RangeArray ra = new RangeArray(-5, 5);

RangeArray ra2 = new RangeArray(1, 10);

RangeArray ra3 = new RangeArray(-20, -12);

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π³Π° Π² качСствС массива.

Console.WriteLine("Π”Π»ΠΈΠ½Π° массива Π³Π°: " + Π³Π°.Length); for(int i = -5; i <= 5; i++)

Π³Π°[i] = i;

Console.Write("Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ массива Π³Π°: "); for(int i = -5; i <= 5; i++)

Console.Write(ra[i] + " ");

Console.WriteLine("\n");

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ 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("\n") ;

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π³Π°Π— Π² качСствС массива.

Console.WriteLine("Π”Π»ΠΈΠ½Π° массива Π³Π°Π—: " + Π³Π°Π—.Length); for(int i = -20; i <= -12; i++) ra3[i] = i;    >

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;

}

ΠŸΡ€ΠΈ конструировании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ класса 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) {