Что такое индексаторы в C#

Индексаторы позволяют обращаться к объектам класса так же, как к массивам, используя квадратные скобки []. Они определяются с помощью ключевого слова this.

Определение индексатора

Индексатор определяется как свойство, но без имени. Он может быть только get, set или содержать оба аксессора.

Пример индексатора в классе:

using System;

class SampleCollection
{
    private string[] data = new string[5];

    public string this[int index]
    {
        get { return data[index]; }
        set { data[index] = value; }
    }
}

class Program
{
    static void Main()
    {
        SampleCollection collection = new();
        collection[0] = "Hello";
        collection[1] = "World";
        
        Console.WriteLine(collection[0]); // Выведет: Hello
        Console.WriteLine(collection[1]); // Выведет: World
    }
}

Индексаторы с несколькими параметрами

Можно использовать несколько параметров для индексатора. Например, индексатор для двумерного массива:

class Matrix
{
    private int[,] data = new int[3, 3];

    public int this[int row, int col]
    {
        get { return data[row, col]; }
        set { data[row, col] = value; }
    }
}

Отличия индексаторов от свойств

СвойствоИндексатор
Имеет явное имяИспользует this
Доступ через точку (obj.Property)Доступ через [] (obj[index])
Хранит или вычисляет одно значениеМожет хранить набор значений

Когда использовать индексаторы

  • Когда объект ведёт себя как коллекция.
  • Когда удобнее обращаться к данным через [].

Индексаторы делают работу с классами, содержащими коллекции, удобнее и интуитивнее.