インターフェイスが別のインターフェイスを返すプロパティまたはメソッドを指定している場合、最初のインターフェイスの実装で戻り型をより具体的な型に「変更」できないのはなぜですか。
説明のために例を見てみましょう。
interface IFoo
{
IBar GetBar();
}
interface IBar
{ }
class Foo : IFoo
{
// This is illegal, we are not implementing IFoo properly
public Bar GetBar()
{
return new Bar();
}
}
class Bar : IBar
{ }
私はそれを機能させる方法を知っています、それは私の関心事ではありません。
私はどちらかをすることができます:
- のリターンタイプを、、またはに変更
GetFoo()
しIBar
ます - インターフェイスを明示的に実装し、メソッド
GetBar
から呼び出すだけですIFoo.GetBar()
私が本当に求めているのは、上記のコードをコンパイルするだけではない理由です。上記がで指定された契約を履行しない場合はありますかIFoo
?