2010-09-17 80 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#