如何解决使用显式接口实现是否意味着要隐藏功能?
| 我使用接口来解耦代码。我很好奇,使用显式接口实现是为了隐藏功能吗? 例:public class MyClass : IInterface
{
void IInterface.NoneWillCall(int ragh) { }
}
通过接口仅显式提供此功能的好处和特定用例是什么?
解决方法
根据我的经验,它有两个主要用途:
它允许您通过返回值重载方法。例如,
IEnumerable<T>
和IEnumerable
都声明了GetEnumerator()
方法,但是返回类型不同-因此要实现这两种方法,必须显式实现它们中的至少一个。当然,在这个问题中,这两种方法都是由接口提供的,但是有时您只想给与接口方法不同类型的\“ normal \”方法(通常是一种更具体的方法)。
它允许您以“区分”的方式实现接口的一部分-例如,ReadOnlyCollection<T>
实现IList<T>
,但使用显式接口实现“不鼓励”变异调用。这将阻止通过具体类型知道对象的调用者调用不适当的方法。这有点让人觉得接口太宽泛或实现不当-如果您无法履行其所有合同,为什么还要实现一个接口呢? -但从务实的角度来看,它可能会有用。
,一个例子是ICloneable。通过显式实现它,您仍然可以拥有一个强类型版本:
public class MyClass : ICloneable {
object ICloneable.Clone() {
return this.Clone();
}
public MyClass Clone() {
return new MyClass() { ... };
}
}
,它不是为了隐藏方法,而是使从不同接口以不同方式实现具有相同签名/名称的两个方法成为可能。
如果IA和IB都具有操作F,则只能通过显式实现接口来为每个F实现不同的方法。
,它可以用于隐藏。例如,某些实现IDisposable
的类这样做是因为它们也具有执行相同功能的Close()
方法。
当您在一个类上实现两个接口并且存在签名冲突并且功能因接口而异时,也可以使用显式接口定义。但是,如果发生这种情况,通常表明您的课程做得太多了,您应该考虑将功能分开。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。