【问题标题】:C# Default access modifier of Main() methodC# Main() 方法的默认访问修饰符
【发布时间】:2011-04-13 18:08:25
【问题描述】:

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

通过类视图,我看到 Main 的默认访问修饰符是 internal。

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

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

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

【问题讨论】:

    标签: c#


    【解决方案1】:

    如果您的代码如下所示:

    static void Main()
    

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

    如果不查看代码或类视图的屏幕截图,很难准确理解通过类视图看到的内容,但方法的默认可访问性绝对是私有的。不管是不是Main方法都是这样。


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

    【讨论】:

    • 当然,在interfaceenum 类型中声明的成员始终是公共的,并且不允许使用enuminterface 类型的成员指定任何访问修饰符。 classstruct 中声明的成员默认情况下肯定是私有的,就像你说的那样。另一个问题:上面的Main 方法是非静态的,所以不能作为入口点。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      在类浏览器中看不到成员的默认访问修饰符,可以看到实际访问修饰符。

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

      【讨论】:

        【解决方案4】:

        两者,默认的类修饰符是内部的。 main 方法是一个方法并且是私有的。一般来说,没有修饰符的类是内部的,没有声明的类成员(例如方法和字段)是私有的。

        【讨论】:

        • 非嵌套类的默认值是内部的。对于嵌套类型,它是私有的。
        【解决方案5】:

        私有成员只能在声明它们的类的主体内访问。

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

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

        【讨论】:

          【解决方案6】:

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

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

          您可以看到 Main() 是私有的。

          【讨论】:

            猜你喜欢
            • 2011-04-10
            • 1970-01-01
            • 1970-01-01
            • 2021-06-10
            • 2012-03-03
            • 1970-01-01
            • 2011-02-01
            相关资源
            最近更新 更多