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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ПолноС руководство. Π‘# 4.0Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 68

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

Бвойство Length ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΊΠΎΠ΄Π° Π² Π΅Π³ΠΎ классС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒΠ΅Π³ΠΎ аксСссор set объявлСн ΠΊΠ°ΠΊ private. А ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ свойство Length Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈΠ΅Π³ΠΎ класса Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ своСго класса свойство, посущСству, оказываСтся доступным Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния. Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΈ свойство Error, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.public bool Error { get; private set; }

Благодаря этому свойство Error становится доступным для чтСния, Π½ΠΎ Π½Π΅ для установки Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ класса FailSoftArray.

Для опробования автоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² свойств Length ΠΈ ErrorΠ² классС FailSoftArray ΡƒΠ΄Π°Π»ΠΈΠΌ сначала ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ len ΠΈ ErrFlag, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ онибольшС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… len ΠΈ ErrFlagсвойствами Length ΠΈ Error Π² классС FailSoftArray. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚ класса FailSoftArray вмСстС с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Main(), Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ Π΅Π³ΠΎΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.// ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ автоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΈ доступныС// Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния свойства Length ΠΈ Error.using System;class FailSoftArray { int[] a; // ссылка Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ массив // ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ массив ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ. public FailSoftArray(int size) { a = new int [size]; Length = size; } // АвтоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠ΅ ΠΈ доступноС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния свойство Length. public int Length { get; private set; } // АвтоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠ΅ ΠΈ доступноС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния свойство Error. public bool Error { get; private set; } // Π­Ρ‚ΠΎ индСксатор для массива FailSoftArray. public int this[int index] { // Π­Ρ‚ΠΎ аксСссор get. get { if(ok(index)) { Error = false; return a[index]; } else { Error = true; return 0; } } // Π­Ρ‚ΠΎ аксСссор set. set { if(ok(index)) { a[index] = value; Error = false; } else Error = true; } } // Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ссли // индСкс находится Π² установлСнных Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ…. private bool ok(int index) { if(index >= 0 & index < Length) return true; return false; }}// ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ// отказоустойчивого массива.class FinalFSDemo { static void Main() { FailSoftArray fs = new FailSoftArray(5); // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свойство Error. for(int i=0; i < fs.Length + 1; i++) { fs[i] = i*10; if(fs.Error) Console.WriteLine("Ошибка Π² индСксС " + i); } }}

Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ класса FailSoftArray дСйствуСт Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ, Π½ΠΎ Π² Π½Π΅ΠΌ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ поля, ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹Π΅ явно.

На ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа Π² аксСссорах Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° доступа ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ аксСссор: set ΠΈΠ»ΠΈ get, Π½ΠΎ Π½Π΅ ΠΎΠ±Π° сразу. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΠ±ΠΎΠ»Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ доступ ΠΊ аксСссору, Ρ‡Π΅ΠΌ доступ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ свойства ΠΈΠ»ΠΈ индСксатора. И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ объявлСнии аксСссорав интСрфСйсС ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ аксСссора, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π² интСрфСйсС. (ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± интСрфСйсах Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π² Π³Π»Π°Π²Π΅ 12.)ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ индСксаторов ΠΈ свойств

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π±Ρ‹Π» продСмонстрирован основной принципдСйствия индСксаторов ΠΈ свойств, Π½ΠΎ ΠΈΡ… возмоТности Π½Π΅ Π±Ρ‹Π»ΠΈ раскрыты Π² ΠΏΠΎΠ»Π½ΡƒΡŽΡΠΈΠ»Ρƒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ этой Π³Π»Π°Π²Ρ‹ обратимся ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ класса RangeArray,Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ индСксаторы ΠΈ свойства ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для создания Ρ‚ΠΈΠΏΠ° массива с ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ индСксирования, опрСдСляСмыми ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

Как Π²Π°ΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΆΠ΅ извСстно, индСксированиС всСх массивов Π² C# начинаСтсяс нуля. Но Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прилоТСниях индСксированиС массива ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с любой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ отсчСта: с 1 ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ с ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ числа, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚-5 ΠΈ Π΄ΠΎ 5. РассматриваСмый здСсь класс RangeArray Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹Π΄ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° индСксированиС массивов.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ класс RangeArray, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°.RangeArray rΠ° = new RangeArray(-5, 10); // массив с индСксами ΠΎΡ‚ -5 Π΄ΠΎ 10for(int i=-5; i <= 10; i++) ra[i] = i; // индСксированиС массива ΠΎΡ‚ -5 Π΄ΠΎ 10

НСтрудно Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС этого ΠΊΠΎΠ΄Π° конструируСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса RangeArray с ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ индСксирования массива ΠΎΡ‚ -5 Π΄ΠΎ 10 Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ индСкс, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ индСкс. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎΠΎΠ±ΡŠΠ΅ΠΊΡ‚ rΠ° Π±ΡƒΠ΄Π΅Ρ‚ сконструирован, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ проиндСксирован ΠΊΠ°ΠΊ массив Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΡ‚ -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); // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ra Π² качСствС массива. Console.WriteLine("Π”Π»ΠΈΠ½Π° массива ra: " + rΠ°.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("\n"); // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ra2 Π² качСствС массива. Console.WriteLine("Π”Π»ΠΈΠ½Π° массива ra2: " + 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"); // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ raΠ— Π² качСствС массива. Console.WriteLine("Π”Π»ΠΈΠ½Π° массива ra3: " + ra3.Length); for(int i = -20; i <= -12; i++) ra3[i] = i; Console.Write("Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ массива ra3: "); for(int i = -20; i <= -12; i++) Console.Write(ra3[i] + " "); Console.WriteLine("\n"); }}

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ этого ΠΊΠΎΠ΄Π° получаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.Π”Π»ΠΈΠ½Π° массива ra: 11Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ массива ra: -5 -4 -3 -2 -1 0 1 2 3 4 5Π”Π»ΠΈΠ½Π° массива ra2: 10Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ массива ra2: 1 2 3 4 5 6 7 8 9 10Π”Π»ΠΈΠ½Π° массива ra3: 9Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ массива ra2: -20 -19 -18 -17 -16 -15 -14 -13 -12

Как слСдуСт ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π°, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ°RangeArray ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС массивов, начиная с любой Ρ‚ΠΎΡ‡ΠΊΠΈ отсчСта, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с нуля. Рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ саму Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ классаRangeArray.

Π’ Π½Π°Ρ‡Π°Π»Π΅ класса RangeArray ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра.// Π—Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.int[] Π°; // ссылка Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ массивint lowerBound; // наимСньший индСксint upperBound; // наибольший индСкс