Код: Выделить всё
sealedОднако для явной реализации интерфейсов в других интерфейсах это не похоже на случай. Например:
Код: Выделить всё
interface IBase {
//public hidebysig newslot virtual instance void
public void DefaultImpl() {
Console.WriteLine("IBase DefaultImpl");
}
}
interface IDerived : IBase {
// no newslot..presumably reusing the one declared above
//private final hidebysig virtual instance void
void IBase.DefaultImpl() {
Console.WriteLine("IDerived DefaultImpl");
}
}
interface IMoreDerived : IDerived {
// this "overrides"
// private final hidebysig virtual instance void
void IBase.DefaultImpl() {
Console.WriteLine("IMoreDerived DefaultImpl");
}
}
class MoreDerivedClass: IMoreDerived {
// this "overrides" too - uncomment to see
//public final hidebysig newslot virtual instance void
//public void DefaultImpl() {
// Console.WriteLine("MoreDerivedClass DefaultImpl");
//}
}
Когда мы тестируем, мы видим что реализация IDerived вообще не была окончательной (справедливости ради это видно по отсутствию ошибок компиляции).
Код: Выделить всё
IBase iBase = new MoreDerivedClass();
iBase.DefaultImpl(); // "IMoreDerived DefaultImpl"
Единственная соответствующая официальная информация, которую мне удалось найти, была из Дополнения к спецификации CLI ECMA-335
Методы интерфейса разрешены для MethodImpl и других методов интерфейса
требуется интерфейс (но мы требуем, чтобы MethodImpl были финальными, чтобы
сохранять данные просто) - т.е. интерфейсу разрешено предоставлять (или
переопределять) реализацию метода другого интерфейса
Как обстоят дела оставался простым? Приносится ли здесь семантическое значение в жертву ради повторного использования финала в качестве маркера где-нибудь в качестве детали реализации?
Подробнее здесь: https://stackoverflow.com/questions/786 ... y-meaningl
Мобильная версия