На этом шаге мы рассмотрим еще один пример использования идексаторов, в частности, случай, когда имеерся только get-аксессор.
В следующем примере рассматривается ситуация, когда индексатор имеет только get-аксессор. Интересующая нас программа представлена ниже.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr129_1 { // Класс с индексатором: class MyClass { // Закрытое целочисленное поле: private int number; // Конструктор с одним аргументом: public MyClass (int n){ // Присваивание значения полю: number = n; } // Целочисленный индексатор с целочисленным индексом: public int this[int k] { // Метод вызывается при считывании значения выражения //с проиндексированным объектом: get { // Целочисленная переменная: int n = number; // "Отбрасывание" цифр из младших разрядов: for (int i = 1; i < k; i++) { n /= 10; } // Значение свойства: return n % 10; } } } // Класс с главным методом: class Program { // Главный метод: static void Main() { // Создание объекта: MyClass obj = new MyClass(12345); // Цифры в десятичном представлении числа: for(int k = 1; k < 9; k++){ Console.Write(" | " + obj[k]); } Console.WriteLine(" |"); // Задержка: Console.ReadLine(); } } }
Результат выполнения программы вполне ожидаем.
Рис.1. Результат выполнения программы
У класса MyClass есть закрытое целочисленное поле, значение которому присваивается при создании объекта. Индексатор, описанный в классе, имеет только get-аксессор. При индексировании объекта результатом возвращается цифра в десятичном представлении числа, записанного в поле number. Индекс, указанный при индексировании объекта, определяет позицию цифры в десятичном представлении числа.
Для вычисления значения индексатора в теле get-акссссора командой
int n = number;
n /= 10; ,
В главном методе программы мы создаем объект оbj, полю number которого присваивается значение 12345. Затем запускается цикл (из восьми итераций), и за каждую итерацию отображается значение obj[k]. В итоге мы получаем цифры из десятичного представления числа, только не справа налево (как они записаны в числе), а слева направо. Причем нули соответствуют тем разрядам, которые в числе не представлены.
На следующем шаге мы продолжим изучение вопроса.