2013-07-11 44 views
4

interface方法的訪問修飾符是什麼?它應該是publicprotected,因爲您可以在實施它們時訪問它們(這是有道理的)。它也應該是abstract,因爲它們沒有實現。但最近我一直在讀一本書,叫做CLR通過C#和大約接口章說以下我對C#接口成員的默認訪問修飾符感到困惑

的CLR要求interface方法被標記爲virtual。如果您沒有在源代碼中明確標記該方法爲virtual,則編譯器將該方法標記爲virtualsealed

當您標記interface成員virtual編譯器抱怨訪問修飾符無效。我的意思是沒有訪問修飾符對interface中的任何內容都有效,而不是由編譯器賦予它們的默認值。任何人都可以爲我清楚嗎?

+0

CLR的實現細節和C#語言的指定行爲之間有區別。並不是那麼令人驚訝。 CLR要求接口方法是虛擬的,但是您不要在C#中以這種方式聲明它們,因爲您無法在派生類中重寫它們。 –

回答

8

Interfaces (C# Programming Guide)

接口可以包含方法,屬性,事件,索引,或者任何 這四個構件類型的組合。有關示例的鏈接,請參閱 相關章節。一個接口不能包含常量,字段,運算符,實例構造函數,析構函數或類型。 界面 成員自動公開,並且它們不能包含任何訪問 修飾符。成員也不能是靜態的。

而關於界面成員實現:

要實現接口成員,的 實現類的對應的成員必須是公共,無靜電,並且具有相同的 名稱和簽名作爲接口成員。

所以你不能使用protected來實現接口成員之一。

0

不要用你的評論表示贊同:

的CLR要求,接口方法被標記爲虛擬的。如果您沒有在源代碼中將該方法明確標記爲虛擬,則編譯器會將該方法標記爲虛擬並密封。

esp因爲你提到CLR通過C#,我相信你有錯讀。聖經不可能是錯的。

編輯:提供更多的細節。

正如其他人所建議的,您不能在接口成員中擁有訪問修飾符(或虛擬)。 默認情況下(和定義)接口內的所有成員是公共的和抽象的。

+0

我複製了你從書中看到的東西。我怎麼會錯過 - 讀它? – Dimitri

+3

這不是他的*評論,這是來自你稱之爲「聖經」的書的引用。即使它不是,這不是一個非常有用的答案。你不解釋任何事情,你只是[呼籲權威](https://en.wikipedia.org/wiki/Argument_from_authority)。傑弗裏裏克特是人類,當然,他可能犯了一個錯誤。 –

+0

你的人有什麼問題?我做錯什麼了嗎?你只是問了一個問題。這本書所說的與我所知道的不同,我感到困惑。如果你能回答我的問題,那麼你是受歡迎的,如果你不能,那麼你爲什麼在這裏呢? – Dimitri