Странный interface mapping
От: nikov США http://www.linkedin.com/in/nikov
Дата: 10.11.07 19:30
Оценка:
Обнаружилось, что в Nemerle interface mapping работает иначе, чем в C#.

Например, в C# вполне законными (правильно компилируются, верифицируются и работают) являются следующие конструкции:

class Base {
    public void Dispose() { }
}

class Derived : Base, System.IDisposable {
    new protected void Dispose() { }
}


class Base {
    public void Dispose() { }
}

class Derived : Base, System.IDisposable
{
    new public static void Dispose() { }
}


В обоих случаях метод интерфейса отображается на public non-static метод Dispose, унаследованный из класса Base.

Компилятор же Nemerle отвергает обе конструкции:


class Base {
  public Dispose() : void { }
}

class Derived : Base, System.IDisposable {
  new protected Dispose() : void { }
}


1.ncc:6:3:6:37: ←[01;31merror←[0m: method implementing interface member must be public and nonstatic
1.ncc:5:1:7:2: ←[01;31merror←[0m: unimplemented interface method System.IDisposable.Dispose() : void (in Derived type)





class Base {
  public Dispose() : void { }
}

class Derived : Base, System.IDisposable {
  new public static Dispose() : void { }
}



1.ncc:5:1:7:2: ←[01;31merror←[0m: unimplemented interface method System.IDisposable.Dispose() : void (in Derived type)


Предлагаю:
1) Либо привести алгоритм в соответствие со стандартом C# (чтобы минимизировать сюрпризы для переходящих на Nemerle c C#)
2) Либо оставить как есть, но описать в wiki фактический алгоритм interface mapping'а, используемый компилятором Nemerle.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.