Dlaczego implementacja interfejsu nie może zwrócić bardziej konkretnego typu?

Jeśli interfejs określa właściwość lub metodę zwracania innego interfejsu, dlaczego nie zezwala się na implementacje pierwszego interfejsu, aby „zmienić” typ powrotu na bardziej konkretny typ?

Weźmy przykład ilustrujący:

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

wiem jak to działa, to jestnie moja troska.

Mogę tylko:

Zmień typ powrotuGetFoo() doIBarlubJawnie zaimplementuj interfejs i po prostu zadzwońGetBar zIFoo.GetBar() metoda

To, o co tak naprawdę pytam, to uzasadnienie nie tylko zezwalania na powyższy kod do kompilacji. Czy jest przypadek, w którym powyższe nie spełnia umowy określonej przezIFoo.

questionAnswers(2)

yourAnswerToTheQuestion