Методы интерфейса в C # могут быть реализованы явно, так что их реализация вызывается, когда экземпляр явно приводится к типу интерфейса.Почему это также не поддерживается в виртуальных методах классов?
Хотя решение проблемы «множественного наследования» является уникальным для интерфейсов, кажется, что по любой другой причине явное использование членов было бы полезно для интерфейсов, онитакже было бы полезно для виртуальных методов.На ум приходит более чистая ковариационная модель возвратного типа.
Редактировать: По запросу пример:
public class Foo {
...
}
public class Bar : Foo {
...
}
class Base {
abstract Foo A ();
}
class Dervied {
private Bar _b;
Bar A () {
return _b;
}
Foo Base.A () {
return _b;
}
}
Мне известно об использовании вспомогательных методов для имитации этого, но чистый эффект кажетсяиметь какие-то плохие характеристики, которые имела бы явная реализация, но с более грязным API.Суть моего вопроса не в том, как сделать ковариацию возвращаемого типа, а в том, почему подобный механизм для интерфейсов не поддерживается для виртуальных методов.