2011-05-03 98 views
2

當類實現接口時,接口成員的類型修飾符應該是公共的。爲什麼會有這樣的限制?用於接口的公共類型修飾符

+0

mempublic?另外:「類型修飾符」,你的意思是「可達性修飾符」? – 2011-05-03 10:47:22

+0

接口成員是隱式公開的。不是執行。 – 2011-05-03 12:22:31

回答

1

實現接口方法有兩種方式;第一個是隱含的實現 - 它假定公開API暴露了接口方法,並且是您毫無疑問看到的。

但是,您也可以使用明確實現:

void IDisposable.Dispose() { 
    // clean up 
} 

是一個簡單的例子;這是私人的,但滿足界面。顯式實現總是優先於公共API上的相似命名方法。

實際上,顯式實現通常是必需的,例如實現IEnumerable<T>--因爲存在兩個衝突的方法;以下是常見的:

// public API will be used for implicit IEnumerable<T>.GetEnumerator() 
public IEnumerator<T> GetEnumerator() { ... do work ... } 
// explicit implementation of IEnumerable.GetEnumerator() 
IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } 

所以:如果你不想公開成員;使用明確的實現。

3

接口定義其他對象如何與實現該接口的類型的對象通信;由於其他對象只能與其他類型的公共屬性和方法進行交互,因此接口必須將這些屬性和方法定義爲公共屬性。

+0

除了他們不需要公開...他們可以是明確的 – 2011-05-03 10:46:05

+4

雖然在技術上我同意,我確實考慮一個明確的接口來定義一個類型的公共契約;事實上,一個類型實現該接口是其公共定義的一部分,因此獲取這些接口成員是容易和保證/需要的。 Private定義了一個類型封裝和隱藏的內容,而一個接口實際上不屬於這個類型。 – 2011-05-03 10:55:11

0

可以說一個接口可以有私人成員。當一個類繼承這個接口時,這個類將永遠不能訪問私有成員。該類永遠不能實現私有成員,程序永遠不會被編譯。