这个问题和Eric Lippert的回答让我想知道:当实现接口方法时,如何决定使用显式实现还是隐式实现?
就我个人而言,我只在方法签名相同的情况下才认为需要显式实现。
例如,在实现 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();
}
}
显式实现的另一个用途是,如果你不希望通过对象实例调用该方法,而只想通过接口调用。我个人认为这没有太多意义,但在一些非常罕见的情况下,它可能会有用。
菲利普的回答是很实用的,但是还有架构上的考虑。
接口被用来使类之间兼容,以便它们可以被其他对象使用。如果只有那些消费对象需要接口的功能,则应该按最小权限原则限制其使用范围。将接口方法暴露给类的所有其他用户是不必要的。
保罗