在C#中是否可能与另一个接口的字段有接口,但在实现中使用实现接口的类?
下面是一个示例实现 但是当我这样做时,我得到了以下错误“Foo”没有实现接口成员“IBar.MyBar”在C#中是否可能与另一个接口的字段有接口,但在实现中使用实现接口的类?,c#,C#,下面是一个示例实现 但是当我这样做时,我得到了以下错误“Foo”没有实现接口成员“IBar.MyBar” 公共接口IBar { 公共int Id{get;set;} } 公共类酒吧:IBar { 公共int Id{get;set;} } 公共接口IFoo { 公共IBar MyBar{get;} } 公共类Foo:IFoo { 公共栏MyBar{get;} } 因此,在复制代码之后,我认为您需要更改Foo类的实现 到目前为止,你有: public class Foo : IFoo { p
公共接口IBar
{
公共int Id{get;set;}
}
公共类酒吧:IBar
{
公共int Id{get;set;}
}
公共接口IFoo
{
公共IBar MyBar{get;}
}
公共类Foo:IFoo
{
公共栏MyBar{get;}
}
因此,在复制代码之后,我认为您需要更改Foo类的实现
到目前为止,你有:
public class Foo : IFoo
{
public Bar MyBar { get; }
}
我认为你的意思是这样说的,这将按照你的意愿起作用:
public class Foo : IFoo
{
public IBar MyBar { get; }
}
请注意,在IFoo接口中,您将MyBar实现为IBar而不是Bar,因此会出现错误。如果我遗漏了什么,我很抱歉,但我认为这就是问题所在。
如果我能帮助你,我会很高兴的!:) 这个错误很明显:接口
IFoo
表示一个名为MyBar
的成员,其类型为IBar
,而不是Bar
。此合同确保您始终知道您可以从API中获得什么。因此,以下内容将始终返回某种类型的IBar
:
IFoo foo = GetMyFoo();
IBar bar = foo.MyBar;
Bar
-类的实现是一个内部细节,客户不应该关心。因此,您可以轻松地交换该实现,而无需客户端重新编译
但是,有一种方法可以使返回类型成为共同变量。编译器说了什么?
公共类Foo:IFoo{public IBar MyBar{get;}}
应该可以工作。您的方法只适用于C#9.0Foo必须实现IBar MyBar,而不是Bar MyBar…您需要共变量返回类型,这是C#9的一个建议:Anway不清楚您为什么需要它。您希望getMyFoo().MyBar
返回什么?当然是一个IBar
,不是吗?不是,这就是我想要做的,因为Bar实现了IBar来使用这个实现。我怎么能用C#9实现呢?