C#Main()方法的默认访问修饰符

我在vs2010中创建了一个示例类。

通过Class View,我看到Main的默认访问修饰符是internal。

我也看到有些人说Main的默认访问修饰符是“隐式私有”。

Visual Studio 2010自动将程序的Main()方法定义为隐式私有。 这样做可确保其他应用程序无法直接调用另一个应用程序的入口点。

我知道内部和私人之间存在差异。 那么哪一个是正确的?

如果您的代码如下所示:

static void Main() 

那是一个私人方法。 ( static部分与可访问性正交,但必须是入口点。)通常,任何成员的默认可访问性是您可以声明它的最私密的可访问性。 因此,对于类或结构中的方法,这是私有的。 对于顶级(非嵌套)类型,它是内部的。 对于在类/结构中声明的任何成员,它是私有的1 。 对于接口和枚举成员,它是公开的。

如果没有看到你的代码或类视图的截图,很难准确理解你在Class View中看到的内容,但是方法的默认可访问性肯定是私有的。 无论是否是Main方法,都是如此。


1明确的接口实现在这里有点奇怪,因为它既不是私有的也不是公共的; 它只是通过类型无法访问,只能通过界面访问。

您无法在类浏览器中看到成员的默认访问修饰符,您可以看到实际的访问修饰符。

命名空间级别的类的默认访问修饰符是internal ,而类成员(包括嵌套类)的默认访问修饰符是privateMain()函数没有特殊情况。 如果之前没有访问修饰符(Jon Skeet的例子),那么它就是private 。 如果有,那就是它。

两者,默认的类修饰符是内部的。 主要方法是一种方法,是私有的。 通常,没有修饰符的类是内部的,没有声明的类成员(例如方法和字段)是私有的。

虽然您标记了问题c# ,但我要说VS2010生成的默认Program.Main的访问修饰符实际上取决于项目模板,这些模板在每种语言上都有所不同。 我很快尝试了以下内容:

  • 在VB.NET控制台项目中, Program模块(静态类)是Friend (即internal在C#中), Main静态方法是Public

  • 在C#控制台项目中, PrograminternalMainprivate

也就是说,C#项目将只使用默认的访问修饰符(类的internal ,方法的private )。

私有成员只能在声明它们的类的主体内访问。

内部类型或成员只能在同一程序集中的文件中访问

内部’就像’公开,但仅适用于同一集会的所有元素。 assembly1的Class1不能“看到”或访问assembly2的任何内部元素。

默认情况下,C#中Main()的访问说明符是私有的。

这是我在ILDASM中看到MSIL(IL)代码时得到的。

您可以看到Main()是私有的。 C#中简单程序的IL代码