2009-12-03 37 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的一部分。

相關問題