«Странный» синтаксис свойства C#

Я только что видел это в проекте С#:

public char this[int index]

Я считаю себя новичком в C#; кто-нибудь может помочь, что это значит?


person user522745    schedule 03.01.2013    source источник
comment
Я считаю себя новичком в С#, кто-нибудь может помочь, что это значит в С++. Подождите, что?   -  person BoltClock    schedule 03.01.2013
comment
@BoltClock Человек C++ видел это в C#?   -  person Shark    schedule 03.01.2013
comment
@Shark: Я тоже так думал, но только после двойного дубля.   -  person BoltClock    schedule 03.01.2013


Ответы (3)


Это индексатор.

Индексаторы позволяют индексировать экземпляры класса или структуры так же, как массивы. Индексаторы напоминают свойства, за исключением того, что их методы доступа принимают параметры. Индексатор предоставляет синтаксис, подобный массиву. Это позволяет получить доступ к типу так же, как к массиву. Такие свойства, как индексаторы, часто обращаются к резервному хранилищу. Мы часто принимаем параметр типа int и обращаемся к резервному хранилищу типа массива.

Прочтите его на странице http://www.dotnetperls.com/indexer.

string s = "hello";
Console.WriteLine (s[0]); // 'h'
Console.WriteLine (s[3]); // 'l'

Реализация индексатора

Чтобы написать индексатор, определите свойство с именем this, указав аргументы в квадратных скобках. Например:

class Sentence
{
   string[] words = "The quick brown fox".Split();
   public string this [int wordNum] // indexer
   {
      get { return words [wordNum]; }
      set { words [wordNum] = value; }
   }
}

Вот как мы могли бы использовать этот индексатор:

Sentence s = new Sentence();
Console.WriteLine (s[3]); // fox
s[3] = "kangaroo";
Console.WriteLine (s[3]); // kangaroo

Тип может объявлять несколько индексаторов, каждый с параметрами разных типов. Индексатор также может принимать более одного параметра:

public string this [int arg1, string arg2]
{
  get  { ... } set { ... }
}

Индексаторы внутренне компилируются в методы с именами get_Item и set_Item следующим образом:

public string get_Item (int wordNum) {...}
public void set_Item (int wordNum, string value) {...}

Компилятор выбирает имя Item по умолчанию — вы можете изменить его, украсив свой индексатор следующим атрибутом:

[System.Runtime.CompilerServices.IndexerName ("Blah")]
person Soner Gönül    schedule 03.01.2013


Это называется индексатор. Подробнее о них читайте в MSDN.

person Matti Virkkunen    schedule 03.01.2013