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