Добавить в цитаты Настройки чтения

Страница 195 из 502

<b>  protected RangeArrayException(</b>

<b>       System.Runtime.Serialization.SerializationInfo si,</b>

<b>      System.Runtime.Serialization.StreamingContext sc) : base(si, sc) { }</b>

<b>  // Переопределить метод ToString() </b>

<b>  // для класса исключения RangeArrayException.</b>

<b>  public override string ToString() {</b>

<b>    return Message;</b>

<b>  }</b>

<b>}</b>

<b>// Улучшенный вариант класса RangeArray. </b>

<b>class RangeArray {</b>

<b>  // Закрытые данные.</b>

<b>  int[] a; // ссылка на базовый массив</b>

<b>  int lowerBound; // наименьший индекс</b>

<b>  int upperBound; // наибольший индекс</b>

<b>  // Автоматически реализуемое и доступное</b>

<b>  // только для чтения свойство Length,</b>

<b>  public int Length { get; private set; }</b>

<b>  // Построить массив по заданному размеру</b>

<b>  public RangeArray(int low, int high) {</b>

<b>    high++;</b>

<b>    if(high &lt;= low) {</b>

<b>      throw new RangeArrayException(&quot;Нижний индекс не меньше верхнего.&quot;);</b>

<b>    }</b>

<b>    a = new int[high - low];</b>

<b>    Length = high - low;</b>

<b>    lowerBound = low;</b>

<b>    upperBound = --high;</b>

<b>  }</b>

<b>  // Это индексатор для класса RangeArray.</b>

<b>  public int this[int index] {</b>

<b>    // Это аксессор get. </b>

<b>    get {</b>

<b>      if(ok(index)) {</b>

<b>        return a[index - lowerBound];</b>

<b>      } else {</b>

<b>        throw new RangeArrayException(&quot;Ошибка нарушения границ.&quot;);</b>

<b>      }</b>

<b>    }</b>

<b>    // Это аксессор set.</b>

<b>    set {</b>

<b>      if(ok(index)) {</b>

<b>        a[index - lowerBound] = value;</b>

<b>      }</b>

<b>      else throw new RangeArrayException(&quot;Ошибка нарушения границ.&quot;);</b>

<b>    }</b>

<b>  }</b>

<b>  // Возвратить логическое значение true, если </b>

<b>  // индекс находится в установленных границах,</b>

<b>  private bool ok(int index) {</b>

<b>    if(index &gt;= lowerBound &amp; index &lt;= upperBound) return true;</b>

<b>    return false;</b>

<b>  }</b>

<b>}</b>

<b>// Продемонстрировать применение массива с произвольно</b>

<b>// задаваемыми пределами индексирования,</b>

<b>class RangeArrayDemo {</b>

<b>  static void Main() {</b>

<b>    try {</b>

<b>      RangeArray ra = new RangeArray(-5, 5);</b>

<b>      RangeArray ra2 = new RangeArray(1, 10);</b>

<b>      // Использовать объект га в качестве массива.</b>

<b>      Console.WriteLine(&quot;Длина массива rа: <sup>&quot;</sup> + ra.Length);</b>

<b>      for(int i = -5; i &lt;= 5; i++) ra[i] = i;</b>

<b>      Console.Write(&quot;Содержимое массива ra: &quot;);</b>

<b>      for (int i = -5; i &lt;= 5; i++)</b>

<b>        Console.Write(ra[i] + &quot; &quot;);</b>

<b>      Console.WriteLine(&quot;n&quot;);</b>

<b>      // Использовать объект ra2 в качестве массива.</b>

<b>      Console.WriteLine(&quot;Длина массива rа2: &quot; + ra2.Length);</b>

<b>      for (int i = 1; i &lt;= 10; i++) ra2[i] = i;</b>

<b>      Console.Write(&quot;Длина массива ra2: &quot;);</b>

<b>      for (int i = 1; i &lt;= 10; i++)</b>

<b>        Console.Write(ra2[i] + &quot; &quot;);</b>

<b>      Console.WriteLine(&quot;n&quot;) ;</b>