2010-09-17 104 views
5

我在vs2010中創建了一個樣例類。C#Main()方法的默認訪問修飾符

通過Class View,我看到Main的默認訪問修飾符是internal。

我也看到一些人說Main的默認訪問修飾符是「隱含私有」的。

Visual Studio 2010自動將程序的Main()方法定義爲隱式私有。這樣做可以確保其他應用程序不能直接調用另一個應用程序的入口點。

我知道內部和私人之間存在差異。那麼哪一個是正確的?

回答

13

如果出現類似這樣的代碼:

static void Main() 

那麼這是一個私有方法。 (static部分與可訪問性正交,但必須是入口點。)通常,任何成員的默認可訪問性是您可以聲明的最私密的可訪問性。所以對於類或結構中的方法,這是私有的。對於頂級(非嵌套)類型而言,它是內部的。對於在類/結構中聲明的任何成員,它是私有的。對於接口和枚舉成員,它是公開的。

很難理解您通過Class View所看到的內容,但沒有看到您的代碼或類視圖的屏幕截圖,但方法的默認可訪問性絕對是私有的。這是真的,不管它是否是Main方法。


顯式接口實現有點奇怪這裏,因爲它既不私人,也沒有公開的;它只是通過界面無法通過類型訪問。

+1

當然,在'interface'或'enum'類型中聲明的成員總是公有的,並且不允許指定具有'enum'和'interface'類型成員的訪問修飾符。就像你說的那樣,在'class'或'struct'中聲明的成員默認是私有的。另一個問題:上面的Main方法是非靜態的,所以它不能成爲入口點。 – 2012-10-22 16:23:58

+0

@JeppeStigNielsen:會編輯。 – 2012-10-22 16:30:06

2

兩者,默認的類修飾符都是內部的。主要方法是一種方法,是私人的。通常,沒有修飾符的類是內部的,沒有聲明的類成員(例如方法和字段)是私有的。

+1

*非嵌套*類的默認值是internal。對於嵌套類型,它是私人的。 – 2010-09-17 14:11:52

1

私人成員只能在聲明它們的類的主體內訪問。

內部類型或成員都可以訪問只在同一程序

內部文件「就像是」公開,但只對同一程序集的所有元素。 assembly1的Class1不能「查看」或訪問assembly2的任何內部元素。

3

您無法在類瀏覽器中看到成員的默認訪問修飾符,您可以看到實際的訪問修飾符。

名稱空間級別的默認訪問修飾符爲internal,而類成員(包括嵌套類)的默認訪問修飾符爲privateMain()函數沒有特殊情況。如果在它之前沒有訪問修飾符(Jon Jon Skeet的例子),那麼它是private。如果有一個,那麼就是這樣。

2

雖然您標記了您的問題,但我想說,由VS2010生成的默認Program.Main的訪問修飾符實際上取決於項目模板,對於每種語言,這些不同。我迅速試過如下:

  • 在VB.NET控制檯項目,所述Program模塊(靜態類)是Friend(即internal在C#)和Main靜態方法是Public

  • 在C#控制檯項目中,Programinternal,而Mainprivate

也就是說,一個C#項目將使用默認的訪問修飾符(internal上課,private的方法)。

0

默認情況下,C#中Main()的訪問說明符是私有的。

這就是我在ILDASM中看到MSIL(IL)代碼時得到的結果。

你可以看到Main()是私有的。 IL code of Simple Program in C#