Ele serve como uma chave para encapsular uma coleção ou matriz interna.
Como no exemplo a seguir, a classe DayCollection ta encapsulando os dias da semana com um indexador do tipo string.
Exemplo:
class DayCollection
{
string[] days = { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" };
// Indexer with only a get accessor with the expression-bodied definition:
public int this[string day] => FindDayIndex(day);
private int FindDayIndex(string day)
{
for (int j = 0; j < days.Length; j++)
{
if (days[j] == day)
{
return j;
}
}
throw new System.ArgumentOutOfRangeException(
nameof(day),
$"Day {day} is not supported. Day input must be in the form \"Sun\", \"Mon\", etc");
}
}
https://docs.microsoft.com/pt-br/dotnet/csharp/programming-guide/indexers/using-indexers