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