我在VS2010中创建了一个示例类。
通过“类视图”,我看到Main的默认访问修饰符为internal。
我还看到有人说,Main的默认访问修饰符是“隐式私有”的。
Visual Studio 2010会自动将程序的Main()方法定义为隐式私有。这样做可以确保其他应用程序不能直接调用另一个程序的入口点。
我知道internal和private之间存在差异。那么哪个是正确的呢?
我在VS2010中创建了一个示例类。
通过“类视图”,我看到Main的默认访问修饰符为internal。
我还看到有人说,Main的默认访问修饰符是“隐式私有”的。
Visual Studio 2010会自动将程序的Main()方法定义为隐式私有。这样做可以确保其他应用程序不能直接调用另一个程序的入口点。
我知道internal和private之间存在差异。那么哪个是正确的呢?
static void Main()
那么这是一个私有方法。(静态的部分与可访问性无关,但必须是一个入口点。) 一般来说,任何成员的默认可访问性都是你可以声明的最私有可访问性。因此对于类或结构体中的方法,它是私有的。对于顶级(非嵌套)类型,它是internal。对于在类/结构中声明的任何成员,它都是private1。对于接口和枚举成员,它是public。
如果不看代码或者Class View的屏幕截图,很难理解你所看到的内容,但是无论是不是Main方法,默认的可访问性都是私有的。
1 显式接口实现在这里有点奇怪,因为它既不是私有的也不是公共的;它只能通过接口访问,而不能通过类型访问。
Program.Main
的访问修饰符实际上取决于项目模板,对于每种语言都不同。我快速尝试了以下内容:
在VB.NET控制台项目中,Program
模块(静态类)是 Friend
(即C#中的 internal
),Main
静态方法是 Public
。
在C#控制台项目中,Program
是 internal
,Main
是 private
。
internal
,方法的 private
)。在类浏览器中,您看不到成员的默认访问修饰符,但可以看到实际的访问修饰符。
命名空间级别的类的默认访问修饰符是 internal
,而类成员(包括嵌套类)的默认访问修饰符是 private
。对于 Main()
函数没有特殊情况。如果它之前没有访问修饰符(比如 Jon Skeet 的例子),那么它是 private
。如果有访问修饰符,那么它就是该修饰符指定的访问级别。
默认的类修饰符是 internal。main 方法是一个方法,且为 private。通常情况下,没有修饰符的类是 internal,没有声明的类成员(例如方法和字段)是 private。
私有成员仅在声明它们的类中可访问。
内部类型或成员仅在同一程序集中的文件中可访问。
内部“类似于”公共,但仅适用于同一程序集中的所有元素。程序集1的Class1无法“看到”或访问程序集2中的任何内部元素。
在 C# 中,Main() 的默认访问修饰符是 private。
这就是我在 ILDASM 中查看 MSIL(IL)代码时得到的结果。
你可以看到 Main() 是私有的。
interface
或enum
类型中声明的成员始终是公共的,并且不允许为enum
和interface
类型的成员指定任何访问修饰符。像你所说的那样,声明在class
或struct
中的成员默认情况下肯定是私有的。另一个问题:上面的Main
方法是非静态的,因此它不能作为入口点。 - Jeppe Stig Nielsen