Читаем C# 4.0: полное руководство полностью

Многомерные индексаторы

Индексаторы можно создавать и для многомерных массивов. В качестве примера ниже приведен двумерный отказоустойчивый массив. Обратите особое внимание на объявление индексатора в этом примере.

// Двумерный отказоустойчивый массив.

using System;

class FailSoftArray2D {

  int[,] a; // ссылка на базовый двумерный массив

  int rows, cols; // размеры массива

  public int Length; // открытая переменная длины массива

  public bool ErrFlag; // обозначает результат последней операции

  // Построить массив заданных размеров,

  public FailSoftArray2D(int r, int с) {

    rows = r; cols = с;

    a = new int[rows, cols];

    Length = rows * cols;

  }

  // Это индексатор для класса FailSoftArray2D.

  public int this[int index1, int index2] {

    // Это аксессор get.

    get {

      if(ok(index1, index2)) {

        ErrFlag = false;

        return a[index1, index2];

      }

      else

      {

        ErrFlag = true;

        return 0;

      }

    }

    // Это аксессор set.

    set {

      if(ok(index1, index2)) {

        a[index1, index2] = value;

        ErrFlag = false;

      }

      else

        ErrFlag = true;

    }

  }

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

  // индексы находятся в установленных пределах,

  private bool ok(int index1, int index2) {

    if (index1 >= 0 & index1 < rows & index2 >= 0 &

           index2 < cols) return true;

    return false;

  }

}

// Продемонстрировать применение двумерного индексатора,

class TwoDIndexerDemo {

  static void Main() {

    FailSoftArray2D fs = new FailSoftArray2D(3, 5);

    int x;

    // Выявить скрытые сбои.

    Console.WriteLine("Скрытый сбой.");

    for (int i=0; i < 6; i++) fs[i, i]=i*10;

    for(int i=0; i < 6; i++) {

      x = fs[i, i] ;

      if(x != -1) Console.Write (x + " ");

    }

    Console.WriteLine();

    // А теперь показать сбои.

    Console.WriteLine("\nСбой с уведомлением об ошибках.");

    for(int i=0; i < 6; i++) {

      fs[i,i] = i * 10;

      if(fs.ErrFlag)

        Console.WriteLine("fs[" + i + ", " + i + "] вне границ");

    }

    for(int i=0; i < 6; i++) {

      x = fs[i, i] ;

      if(!fs.ErrFlag)

        Console.Write(x + " ");

      else

        Console.WriteLine("fs[" + i + ", " + i + "] вне границ");

    }

  }

}

Вот к какому результату приводит выполнение этого кода:

Скрытый сбой.

0 10 20 0 0 0

Сбой с уведомлением об ошибках.

fs[3, 3] вне границ

fs[4, 4] вне границ

fs[5, 5] вне границ

0 10 20 fs[3, 3] вне границ

fs[4, 4] вне границ

fs[5, 5] вне границ

<p>Свойства</p>

Еще одной разновидностью члена класса является свойство. Как правило, свойство сочетает в себе поле с методами доступа к нему. Как было показано в приведенных ранее примерах программ, поле зачастую создается, чтобы стать доступным для пользователей объекта, но при этом желательно сохранить управление над операциями, разрешенными для этого поля, например, ограничить диапазон значений, присваиваемых данному полю. Этой цели можно, конечно, добиться и с помощью закрытой переменной, а также методов доступа к ее значению, но свойство предоставляет более совершенный и рациональный путь для достижения той же самой цели.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных