Warum kann eine Schnittstellenimplementierung keinen spezifischeren Typ zurückgeben?

Wenn eine Schnittstelle eine Eigenschaft oder Methode zum Zurückgeben einer anderen Schnittstelle angibt, warum dürfen Implementierungen der ersten Schnittstelle den Rückgabetyp nicht in einen spezifischeren Typ ändern?

Nehmen wir ein Beispiel zur Veranschaulichung:

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
{ }

Ich kenne wie man es funktioniert, das istnicht Mein Konzern.

Ich kann nur entweder:

Ändern Sie den Rückgabetyp vonGetFoo() zuIBar, oderImplementieren Sie die Schnittstelle explizit und rufen Sie sie einfach aufGetBar von demIFoo.GetBar() Methode

Was ich wirklich frage, ist die Begründung dafür, nicht nur zuzulassen, dass der obige Code kompiliert wird. Gibt es einen Fall, in dem das oben Genannte den von festgelegten Vertrag nicht erfüllt?IFoo.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage