¿Por qué una implementación de interfaz no puede devolver un tipo más específico?

Si una interfaz especifica una propiedad o método para devolver otra interfaz, ¿por qué no se permite que las implementaciones de la primera interfaz "cambien" el tipo de retorno a un tipo más específico?

Tomemos un ejemplo para ilustrar:

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

Lo sé como hacer que funcione, eso esno mi preocupación.

Yo solo puedo:

Cambiar el tipo de retorno deGetFoo() aIBaroImplementar explícitamente la interfaz y solo llamarGetBar desde elIFoo.GetBar() método

Lo que realmente estoy preguntando es el razonamiento para no solo permitir que se compile el código anterior. ¿Hay algún caso donde lo anterior no cumpla con el contrato especificado porIFoo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta