Добрый день!
Столкнулись со следующей ситуацией:
Есть базовый класс, содержащий индексатор с параметром int:
public class MyBase
{
public string this[int en] { get { return "Int"; } }
}
и наследник, содержащий индексатор с параметром enum:
public class MyClass : MyBase
{
public string this[MyEnum en] { get { return "Enum"; } }
}
При попытке использовать индексаторы _всегда_ вызывается this[MyEnum en]:
MyClass c = new MyClass();
Console.WriteLine("Enum: " + c[MyEnum.A]);
Console.WriteLine("Int: " + c[0]);
Enum: Enum
Int: Enum
Собственно вопрос -- почему такое происходит?
Если добавить в MyClass определение нового индексатора код начинает вести себя нормально:
public string new this[int i] { { get { return base[i];} } }
Поведение устойчиво воспроизводится на .NET 1.1 и 2.0.