繁体   English   中英

在 C# 中是否有可能与另一个接口的字段具有接口,但在实现中使用实现接口的 class?

[英]Is it possible in C# to have interface with fields of another interface but in the implementation use a class that implements an interface?

下面是一个示例实现。

但是当我这样做时,我得到以下错误'Foo'没有实现接口成员'IBar.MyBar'。

public interface IBar
{
    public int Id { get; set; }
}

public class Bar : IBar
{
    public int Id { get; set; }
}

public interface IFoo
{
    public IBar MyBar { get; }
}

public class Foo : IFoo
{
    public Bar MyBar { get; }
}

好吧,错误很明显:接口IFoo指示一个名为MyBar的成员,类型为IBar ,而不是Bar 该合同确保您始终了解您可以从 API 获得什么。 因此,以下内容总是会返回某种IBar

IFoo foo = GetMyFoo();
IBar bar = foo.MyBar; 

你的Bar类的实现是一个内部细节,客户不应该关心。 因此,您可以轻松地交换该实现,而无需客户端重新编译。

不过,有一个建议 C#9使返回类型协变。

所以,复制代码后,我认为你需要更改 Foo class 实现。

至于现在你有这个:

public class Foo : IFoo
{
    public Bar MyBar { get; }
}

而且我认为您的意思是这样说,这将按您的意图工作:

public class Foo : IFoo
{
   public IBar MyBar { get; }
}

请注意,在 IFoo 接口中,您将 MyBar 实现为 IBar 而不是 Bar,因此会出现错误。 如果我遗漏了什么,我很抱歉,但我认为这就是问题所在。 很高兴我能帮助你::)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM