Вопрос возник в связи с этим дефектом:
https://github.com/rsdn/nemerle/issues/590
Поведение языков отличаются:
C# здесь выберет IA<T>.F
interface IA
{
void F();
}
interface IA<T> : IA
{
new void F();
}
interface IX<T> : IA<T>, IA
{
}
class Program
{
static void Main(string[] args)
{
var a = (IX<int>) null;
a.F();
}
}
Nemerle в аналогичном коде выбирает IA.F !
| Скрытый текст |
| interface IA
{
F() : void;
}
interface IA[T] : IA
{
new F() : void;
}
interface IX[T] : IA[T], IA
{
}
|
| |
Происходит это потому как TypeInfo.LookupMember выкидывает все методы 'new' :
https://github.com/rsdn/nemerle/blob/master/ncc/hierarchy/TypeInfo.n#L793
Обычно это хорошо, но в данном случае не совсем.
Вопрос это баг или "фича" ?