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

时间:2010-09-17 14:06:59

标签: c#

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

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

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

  

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

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

6 个答案:

答案 0 :(得分:16)

如果您的代码如下所示:

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

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


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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

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

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

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

答案 4 :(得分:1)

私有成员只能在声明它们的类的正文中访问。

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

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

答案 5 :(得分:0)

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

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

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

相关问题