Индексатор — это специальный член класса, который позволяет обращаться к элементам объекта как к элементам массива, используя синтаксис квадратных скобок []
. Это мощный инструмент для создания коллекций или классов, которые должны предоставлять индексированный доступ к своим данным.
this
для определенияpublic class MyCollection
{
private string[] items = new string[10];
// Индексатор с целочисленным параметром
public string this[int index]
{
get => items[index];
set => items[index] = value;
}
}
var collection = new MyCollection();
collection[0] = "First"; // Установка значения через индексатор
string item = collection[0]; // Получение значения
public class Matrix
{
private double[,] data = new double[10, 10];
public double this[int row, int column]
{
get => data[row, column];
set => data[row, column] = value;
}
}
public virtual string this[int index]
{
protected get { /* ... */ }
set { /* ... */ }
}
Характеристика | Индексатор | Свойство | Метод |
---|---|---|---|
Синтаксис вызова | obj[index] | obj.Property | obj.Method() |
Имя | this | Любое имя | Любое имя |
Параметры | Обязательны | Нет | Опциональны |
Назначение | Индексированный доступ | Доступ к состоянию | Выполнение действий |
public class Config
{
private Dictionary<string, string> settings = new();
public string this[string key]
{
get => settings.TryGetValue(key, out var value) ? value : null;
set => settings[key] = value;
}
}
public class LazyLoader
{
public Data this[int id] => LoadData(id);
private Data LoadData(int id) { /* ... */ }
}
public class MultiIndex
{
public string this[int index] { /* ... */ }
public string this[string name] { /* ... */ }
}
public string this[int index]
{
get
{
if (index < 0 || index >= items.Length)
throw new IndexOutOfRangeException();
return items[index];
}
}
индексаторы — это удобный синтаксический сахар, который позволяет создавать классы с семантикой массива. Они особенно полезны для реализации коллекций, контейнеров данных и классов, которые должны предоставлять индексированный доступ к своим элементам.