2009-12-03 35 views

回答

8

(个人)当只有具有相同签名的方法之间发生冲突时,才会看到需要显式实现。

例如,执行IEnumerable<T>时,应执行2个方法GetEnumerator(),它们具有相同的签名,但返回类型除外。所以你必须实行IEnumerable.GetEnumerator()明确:

public abstract class MyClass<T> : IEnumerable<T> 
{ 
    public IEnumerator<T> GetEnumerator() 
    { 
     return ...; 
    } 

    IEnumerator IEnumerable.GetEnumerator() // explicit implementation required 
    { 
     return GetEnumerator(); 
    } 
} 

另一个使用了一个明确的实现,如果你不想通过对象实例调用的方法,而只能通过一个界面实现。我个人认为这没有多大意义,但在一些非常罕见的情况下,它可能是有用的。

3

Philippe的答案是实用的,但是,也有一些建筑方面的考虑。

接口用于使类兼容,以便它们可以被其他对象使用。如果只有那些消费对象需要接口的功能,那么它应该受到限制 - 以最小特权为原则。如果没有必要将该接口方法公开给该类的所有其他用户。

保罗

+0

你能想到一个可能适用的例子吗? – jasonh 2009-12-03 19:33:13

+0

Web dev。如果一个类被设计为在整个Web上提供服务,那么可能有一些方法可以用于安全接口中的身份验证,这种安全接口可以在任何其他情况下(本地)使用。这有点了解我认为经常被忽略的C#特性。其他例子呢? – Paul 2009-12-03 19:47:05

1

显式接口的另一种情况是对象需要实现一个接口,以接受来自内部对象的调用,但你不希望公开这些作为API的一部分。

相关问题