Индексаторы позволяют обращаться к объектам класса так же, как к массивам, используя квадратные скобки []
. Они определяются с помощью ключевого слова 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] ) |
Хранит или вычисляет одно значение | Может хранить набор значений |
Когда использовать индексаторы
- Когда объект ведёт себя как коллекция.
- Когда удобнее обращаться к данным через
[]
.
Индексаторы делают работу с классами, содержащими коллекции, удобнее и интуитивнее.