インターフェイスが別のインターフェイスを返すプロパティまたはメソッドを指定している場合、最初のインターフェイスの実装で戻り値の型をより具体的な型に "変更"できないのはなぜですか?なぜインタフェース実装がより特定の型を返すことができないのですか?
がさんは説明するために例を見てみましょう:
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
{ }
私はを知ってそれを動作させるためにどのように、それはない私の懸念があります。
私はどちらかの可能:IBar
からGetFoo()
、または
- 変更戻り値の型が明示的インターフェイスを実装し、ちょうど私が本当に求めています何
IFoo.GetBar()
方法からGetBar
を呼び出します上記のコードをコンパイルするだけではない理由があります。上記がIFoo
で指定された契約を履行しない場合がありますか?
3つ目の方法があり、これは上記2つの方法よりも少し便利です。抽象クラスを使用してインタフェースを実装できます。そして、あなたの "具体的な"クラスでは、インターフェイスの代わりに抽象クラスを継承します。その後、あなたの "具体的な"クラスでは、 "新しい"キーワードを使って基本メソッドを隠すことができます。それは私にとってうまくいっている。 – BrainSlugs83
私はBrainSlugs83のコメントがちょっとした解決策を提供してくれているように答えているように感じます。 –