为什么接口实现不能返回更具体的类型?
- 论坛
- 为什么接口实现不能返回更具体的类型?
19 浏览
为什么接口实现不能返回更具体的类型?
如果一个接口指定一个属性或方法返回另一个接口,为什么不允许第一个接口的实现将返回类型“更改”为更具体的类型呢?让我们举个例子来说明:
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`指定的契约?