Класс с индексом и свойством "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
один раз.
Ответы
Ответ 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()". Это будет то место, где "определяется дважды".