Подтвердить что ты не робот

Класс с индексом и свойством "Item"

Можно ли создать класс в .NET 4 с помощью:

  • указатель,
  • свойство с именем "Item"?

Например, этот класс С# не будет компилироваться для меня:

public class MyClass
{
    public object Item { get; set; }
    public object this[string index] { get { return null; } set { } }
}

Компилятор выдает сообщение об ошибке CS0102:

Тип "MyClass" уже содержит определение для "Item"

хотя я только явно определяю Item один раз.

4b9b3361

Ответ 1

На основе этого сайта можно использовать атрибут для переименования индексатора

public class MyClass
{
    public object Item { get; set; }
    [System.Runtime.CompilerServices.IndexerName("MyItem")]
    public object this[string index] { get { return null; } set { } }
}

Ответ 2

С# внутренне создает свойство с именем Item для языков, которые не поддерживают индекс. Вы можете управлять этим именем, используя IndexerNameAttribute, например:

[IndexerName("MyIndexer")]
public object this[string index]
{
    get { return blah; }
}

Ответ 3

Если я правильно помню, такой индекс можно получить из VB.Net с помощью метода "Item()". Это будет то место, где "определяется дважды".