如果一個接口指定一個返回另一個接口的屬性或方法,爲什麼不允許第一個接口的實現將返回類型「更改」爲更具體的類型?爲什麼接口實現不能返回更具體的類型?
讓我們舉個例子來說明:
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
{ }
我知道如何使它發揮作用,這是不我的關心。
我就可以既:中GetFoo()
到IBar
- 更改返回類型,或
- 明確實現該接口並調用
GetBar
從IFoo.GetBar()
方法
什麼我真的問是不僅允許上面的代碼編譯的推理。是否有任何情況下,上述不符合IFoo
指定的合同。
還有第三種方式,比上述兩種稍微方便一些。您可以使用抽象類實現接口。然後,在你的「具體」類中繼承抽象類而不是接口。然後在你的「具體」類中,你可以用「new」關鍵字隱藏基本方法。它對我來說工作得體。 – BrainSlugs83
我覺得BrainSlugs83的評論是一個答案,因爲它提供了一個體面的解決方法。 –