Используются для создания массивов расширенной функциональности. Идея заложена та же что и в свойствах. Подробнее читайте "Шаг 20 - Свойства (properties)". То есть мы получаем контроль над присваиванием и получением значения. Смотрим пример:
using System; class MyArray { public MyArray() { items = new string[10]; } public string this[int index] { get { return items[index]; } set { items[index] = value; } } private string[] items; } class MainClass { public static void Main(string[] args) { MyArray my = new MyArray(); my[0]="Hello"; Console.WriteLine(my[0]); } }
Как видите я создал свой класс и описал в нем массив. В Для доступа создал безымянный метод this[int index], в котором созданы get и set, точно так же как в свойствах.