为什么接口实现不能返回更具体的类型?

19 浏览
0 Comments

为什么接口实现不能返回更具体的类型?

如果一个接口指定一个属性或方法返回另一个接口,为什么不允许第一个接口的实现将返回类型“更改”为更具体的类型呢?让我们举个例子来说明:

interface IFoo
{
    IBar GetBar();
}
interface IBar
{ }
class Foo : IFoo
{
    // 这是非法的,我们没有正确实现IFoo接口
    public Bar GetBar()
    {
        return new Bar();
    }
}
class Bar : IBar
{ }

我知道如何使它工作,这不是我的关注点。

我可以做以下两种方法之一:

- 将`GetFoo()`的返回类型更改为`IBar`,或者

- 显式实现接口,并从`IFoo.GetBar()`方法中调用`GetBar`

我真正想知道的是为什么不允许上述代码编译。是否有任何情况下上述代码不满足`IFoo`指定的契约?

0