【发布时间】:2009-12-03 18:48:31
【问题描述】:
This question 和Eric Lippert's answer 让我想知道:在实现接口的方法时,您如何决定是使用显式实现还是隐式实现?
【问题讨论】:
标签: c#
This question 和Eric Lippert's answer 让我想知道:在实现接口的方法时,您如何决定是使用显式实现还是隐式实现?
【问题讨论】:
标签: c#
(个人)我认为只有在具有相同签名的方法之间存在冲突时才需要显式实现。
例如,在实现IEnumerable<T> 时,您应该实现两个签名相同的方法GetEnumerator(),除了返回类型。所以你必须明确地实现IEnumerable.GetEnumerator():
public abstract class MyClass<T> : IEnumerable<T>
{
public IEnumerator<T> GetEnumerator()
{
return ...;
}
IEnumerator IEnumerable.GetEnumerator() // explicit implementation required
{
return GetEnumerator();
}
}
显式实现的另一个用途是,如果您不希望通过对象实例调用方法,而只能通过接口调用。我个人认为这没有多大意义,但在极少数情况下,它可能很有用。
【讨论】:
Philippe 的回答是实用的,但也有架构方面的考虑。
接口用于使类兼容,以便其他对象可以使用它们。如果只有那些消费对象需要接口的功能,那么它应该被限制 - 由最小特权原则。如果没有必要将该接口方法公开给该类的所有其他用户。
保罗
【讨论】:
显式接口的另一种情况是对象需要实现接口以接受来自内部对象的调用,但您不希望将这些作为 API 的一部分公开。
【讨论】: