2010-05-26 115 views
36

好的,這是在擾亂我..我知道我已經在某個地方讀過它,谷歌沒有幫助。沒有訪問修飾符的方法

未指定訪問修飾符的方法的可訪問性級別是什麼?我想說internal但我不是100%確定。

+0

在哪種語言? – 2010-05-26 23:14:46

+0

@steve抱歉,已添加c#標記。 – 2010-05-26 23:17:07

回答

39

爲一個類型的默認可訪問性爲internal,但該類型的成員默認的無障礙環境取決於類型。

一般而言,類的成員是private默認,其中作爲結構的成員是public默認。這因語言而異; C++的默認結構訪問修飾符是公共的,而C#則是私有的。

+7

你們是否確定這會倒退?如果我在C#類中放置一個沒有訪問修飾符的方法,C#3.0編譯器會將它構建爲一個私有方法。 – 2010-05-26 23:19:43

+1

Steve是正確的。類方法的默認可訪問性是'private'。自己嘗試一下。 – 2010-05-26 23:28:39

+1

這個答案是正確的。剛剛在VS2010中進行了驗證,因爲我原本以爲這是錯誤的。 – Donnie 2010-05-26 23:33:18

9

對於一個類:如果未指定訪問修飾符,那麼Internal是默認值。

對於方法:如果未指定訪問修飾符,則Private是默認值。

15

是的,internal是類的默認值,但private是成員的默認值。

5

C#編程語言,第三版由安德斯·海爾斯伯格,部分10.3.5( 「類會員 - 訪問修飾符」)434頁:

一個類成員聲明可以具有五種可能的聲明可訪問性(§3.5.1)中的任何一種:public,protected internal, protected,internalprivate。除protected internal組合外,指定多個訪問修飾符時發生編譯時錯誤。 類成員聲明不包含任何訪問修飾符時,假定爲private。然後在部分11.2(「結構成員」)第539頁上 [着重礦]

和:

除了在§11.3指出的不同,類成員的描述中10.3節提供通過§10.14也適用於結構成員。

11.3節沒有提及訪問修飾符什麼,所以我的這個讀數意味着一個struct的成員沒有訪問修飾符也private默認。這符合what MSDN says和我自己的經驗。

3

哦,等等,還有一件事....

interface方法聲明顧名思義當然public的。所以下面的實現是public,沒有明確的訪問修飾符。

public class MyClass : IEqualityComparer<MyClass> 
    bool IEqualityComparer<MyClass>.Equals(MyClass x , MyClass y) {} 
} 
+0

btw接口方法不能是私有的 – Dragon 2015-11-28 09:09:43

+0

哦,是的... [建議繼承'EqualityComparer',而不是實現接口](https://msdn.microsoft.com/en-us/library/ms132123%28v=vs.110%29.aspx)。請參閱「備註」 – radarbob 2015-11-28 22:18:25

0

類方法是私有的,默認情況下在.NET中是封閉的。 這意味着該方法僅在類中可見,不能被繼承類重寫。

0

希望這直接澄清所有按照截圖來自MSDN

enter image description here