Всем привет!
У индексаторов можно указать атрибут System.Runtime.CompilerServices.IndexerName (
msdn), например :
[System.Runtime.CompilerServices.IndexerName("Int")]
public int this[int index]
{
get { return 1; }
}
MSDN пишет, что таким образом можно задать имя для индексатора, которое можно использовать в других языках.
И в C# при попытке вызвать obj.get_Int(7) выпадет ошибка
2011-01-13-Indexer.cs(37,37): Error CS0571: 'TempRecord.this[int].get': cannot explicitly call operator or accessor (CS0571) (2011-01-13-Indexer)
1) Правильно ли то, что на код C# отсутствие/наличие этого атрибута в большинстве случаев не влияет на остальной код — если учесть, что функций вида get_{имя атрибута} не объявлено?
2) В каких языках и где можно использовать индексатор по имени get_Int? Есть предположение, что если компилировать в сборку, то атрибут будет доступен как фнукция. Но где про это можно прочитать?
3) Почему для двух индексаторов необходимо указывать атрибуты с одинаковыми именами, пример :
class TempRecord
{
[System.Runtime.CompilerServices.IndexerName("Int")]
public int this[int index]
{
get { return 1; }
}
// [System.Runtime.CompilerServices.IndexerName("Int")]
public double this[double index]
{
get { return 2.0; }
}
}
class MainClass
{
static void Main()
{
TempRecord t = new TempRecord();
System.Console.WriteLine("{0}", t[1]);
System.Console.WriteLine("{0}", t[2.4]);
System.Console.ReadKey();
}
}
2011-01-13-Indexer.cs(19,19): Error CS0668: Two indexers have different names; the IndexerName attribute must be used with the same name on every indexer within a type (CS0668) (2011-01-13-Indexer)
Еще здесь нашел интересный
этюд c IndexerNameАвтор: nikov
Дата: 29.08.08
.