Кажется, что многие ответы сосредоточены на том, что такое индексатор, а не на том, почему вы хотите его использовать.
Насколько я понимаю, вот мотивация использовать индексатор:
Вы работаете с классом, который имеет коллекцию какого-то рода, но вы хотите, чтобы класс отображался пользователям (потребителям класса), как если бы он был коллекцией .
Лучший пример, который я могу вспомнить, это класс DataRow
в ADO.NET. Если вы хотите получить значение пятой ячейки DataRow
, вы можете использовать DataRow.Item[4]
или DataRow[4]
. Последняя форма представляет собой удобный и логичный ярлык, и она довольно хорошо демонстрирует, почему вы хотите использовать индексатор. Для пользователя DataRow
можно рассматривать как просто набор ячеек (даже если это действительно больше), поэтому имеет смысл иметь возможность получать и устанавливать значения ячеек напрямую, не забывая, что вы фактически получают / устанавливают Item
.
Надеюсь, это поможет.