Шаг 132.
Язык программирования C#. Начала
Свойства и индексаторы. Двумерные индексаторы

    На этом шаге мы рассмотрим использование двумерных индексаторов.

    Двумерный индексатор описывается, в принципе, также, как и одномерный индексатор. Отличие лишь в том, что теперь в индексаторе описывается два индекса (могут быть разного типа). Для каждого индекса указывается тип, описания индексов в квадратных скобках разделяются запятыми. При индексировании объектов также указывается два индекса. В примере ниже представлена программа, дающая представление о том, как описывается и используется двумерный индексатор.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace pr132_1
{
    // Класс с двумерным индексатором: 
    class MyClass{
        // Закрытое поле, являющееся ссылкой на двумерный 
        // символьный массив: 
        private char[,] symbs;

        // Конструктор с двумя аргументами: 
        public MyClass(int a, int b) { 
            // Создание двумерного массива: 
            symbs = new char[a, b];
            // Заполнение двумерного массива.
            // Перебор строк массива:
            for(int i = 0; i < symbs.GetLength(0); i++){
                // Перебор столбцов массива:
                for(int j = 0; j < symbs.GetLength(1); j++){
                    symbs[i, j] = '0'; // Значение элемента массива
                }
            }
        }

        // Метод для отображения содержимого массива: 
        public void show() {
            Console.WriteLine("Двумерный массив:");
            // Перебор строк массива:
            for(int i = 0; i < symbs.GetLength(0); i++) {
                // Перебор столбцов массива:
                for(int j = 0; j < symbs.GetLength(1); j++) {
                    // Отображение значения элемента:
                    Console.Write(symbs[i, j] + " ");
                }
                Console.WriteLine();
            }
        }

        // Двумерный индексатор: 
        public char this[int i, int j] {
            // Метод вызывается при считывании значения 
            // выражения с проиндексированным объектом: 
            get {
                // Результат: 
                return symbs[i, j];
            }
            // Метод вызывается при присваивании значения 
            // выражению с проиндексированным объектом: 
            set {
                // Значение элемента массива: 
                symbs[i, j] = value;
            }
        }
    }

    // Класс с главным методом:
    class Program
    {
        // Главный метод:
        static void Main()
        {
            // Создание объекта:
            MyClass obj = new MyClass(2, 3);
            // Проверка содержимого массива: 
            obj.show();
            // Индексирование объекта: 
            obj[0, 0] = 'А'; 
            obj[1, 2] = 'Z';
            // Проверка содержимого массива: 
            obj.show();
            Console.WriteLine("Проверка:");
            // Индексирование объекта:
            Console.WriteLine("obj[0, 0] = {0}", obj[0, 0]);
            Console.WriteLine("obj[1, 1] = {0}", obj[1, 1]);
            Console.WriteLine("obj[1, 2] = {0}", obj[1, 2]);
            // Задержка:
            Console.ReadLine();
        }
    }
}
Архив проекта можно взять здесь.

    При выполнении программы получаем такой результат.


Рис.1. Результат выполнения программы

    В этой программе мы описываем класс MyClass, в котором есть закрытое поле symbs, представляющее собой ссылку на двумерный символьный массив. Сам массив создается при вызове конструктора, которому передается два целочисленных аргумента. Они определяют размеры массива. Все элементы массива получают символьное значение '0'. Также в классе описан метод show(), при вызове которого отображается содержимое двумерного массива, связанного с объектом, из которого вызывается метод.

    Двумерный индексатор описан в классе MyClass с ключевым словом char, обозначающим тип возвращаемого и присваиваемого значения. У индексатора два индекса - оба целочисленные. При считывании значения выражения вида obj[i, j] (где obj является объектом класса MyClass) результатом возвращается значение соответствующего элемента массива symbs[i, j], а при присваивании значения выражению вида obj[i, j] значение в действительности присваивается элементу массива symbs[i, j]. Выполнение подобных операций проиллюстрировано в главном методе программы.

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг