2009-08-10 125 views

回答

58

顯式接口實現的原因是爲了避免名稱與最終結果的衝突,因爲在調用這些方法之前必須將對象明確地轉換到該接口。

您可以將這些方法視爲不在公開課上,而是直接綁定到接口上。沒有理由指定public/private/protected,因爲它將始終是公共的,因爲接口不能包含非公共成員。

(微軟有一個overview on explicit interface implementation

+1

對於隱式接口,也沒有必要指定爲公共,但它允許這樣做,實際上它必須這樣做。因此,意味着公共邏輯的界面並不能真正解釋我想說的原始問題。 – liang 2013-10-23 09:58:05

+0

對於隱式接口,該方法只是一種可能是私有的方法。僅憑簽名就可以實現接口方法。一個明確的接口定義不能只是公開的。我明白你的觀點,但TBH允許公開隱式方法可能只涉及編譯器執行的操作順序。 – 2013-10-23 18:49:07

+0

'「因爲它永遠是公開的......」從技術上講,這是不正確的,因爲在將對象轉換爲接口之前,您無法從外部調用顯式實現的函數。 – 2013-11-23 06:26:50

23

顯式的成員實現允許具有相同簽名 接口成員歧義。

沒有明確的接口成員實現,類或結構不可能有不同的具有相同簽名和返回類型的接口成員實現。

爲什麼接口的顯式實現不能公開? 當成員被顯式實現時,它不能通過類實例訪問,而只能通過接口的實例訪問。

public interface IPrinter 
{ 
    void Print(); 
} 
public interface IScreen 
{ 
    void Print(); 
} 

public class Document : IScreen,IPrinter 
{ 
    void IScreen.Print() { ...} 
    void IPrinter.Print() { ...} 
} 

..... 
Document d=new Document(); 
IScreen i=d; 
IPrinter p=d; 
i.Print(); 
p.Print(); 
..... 

無法通過類或結構實例訪問顯式接口成員實現。

+9

大多數人不同意你?我覺得很難相信,因爲這正是顯式接口實現存在的原因。 http://msdn.microsoft.com/en-us/library/ms173157.aspx – 2009-08-10 07:09:29

相關問題