Здравствуйте, _FRED_, Вы писали:
D>>Видимо, компилятор игнорирует type cast как redundant. Хотя это смущает. Я бы ожидал, что вызовется как раз int-овый метод.
_FR>Да, это у меня ошибочка вышла
Это известное отклонение компилятора от стандарта. Хотя там написано:
An implicit enumeration conversion permits the decimal-integer-literal 0 to be converted to any enum-type.
, фактически компилятор позволяет неявное преобразование от любого constant expression, значение которого равно 0, 0.0, 0.0F или 0.0M. Похоже, это чинить пока не собираются.
Здравствуйте, diamondio, Вы писали:
D>Собственно вопрос -- почему такое происходит?
Это не баг. Литерал 0 может быть неявно преобразован в любой enum. А если в производном типе есть function member (в частности, индексатор) с подходящей сигнатурой, то члены базовых классов исключаются из рассмотрения. Это обсуждалось на форуме несколько раз, например здесь
Здравствуйте, diamondio, Вы писали:
D>Собственно вопрос -- почему такое происходит?
Потому что сущёствует неявное преобразование из 0 в enum. Поэтому индексатор в наследнике оказывается предподчтительней.
Вот так будет работать, как ожидаается:
int i = 0;
Console.WriteLine(c[i]);
Console.WriteLine(c[1]);
Help will always be given at Hogwarts to those who ask for it.
Что именно "не работает"? У меня вызывается индексатор базового класса (с параметром int).
D>Показалось сначала, что такое поведение не только с 0, это и ввело в замешательство.
На самом деле в примере просто "режет глаза" использование именно нуля: так и кажется, что в нуле-от и лопата
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, diamondio, Вы писали:
D>>А у меня -- вызывается enum-нутый. _FR>
D>>Console.WriteLine("Int: " + c[(int)0]);
_FR>
D>>Правда, каст к инту в IDE выделен серым -- решарпер постарался -- но вряд ли он его удаляет из кода при компиляции, верно?
_FR>А можешь объяснить, почему вызывается "enum-нутый"?
Видимо, компилятор игнорирует type cast как redundant. Хотя это смущает. Я бы ожидал, что вызовется как раз int-овый метод.
Здравствуйте, diamondio, Вы писали:
D>Видимо, компилятор игнорирует type cast как redundant. Хотя это смущает. Я бы ожидал, что вызовется как раз int-овый метод.
Да, это у меня ошибочка вышла
Help will always be given at Hogwarts to those who ask for it.