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を使用します。私の質問の核心は、戻り型の共分散を行う方法ではなく、インターフェイスの同様のメカニズムが仮想メソッドでサポートされていない理由です。