【问题标题】:Why does my program work if my Main method in C# is private?如果我在 C# 中的 Main 方法是私有的,为什么我的程序可以工作?
【发布时间】:2011-04-29 06:59:03
【问题描述】:

默认情况下,类中每个成员的类型修饰符都是私有的,即使 Main() 函数类型修饰符也是私有的。 CLR如何调用外界不可见的main方法?

【问题讨论】:

  • 也许通过Reflection
  • 相比之下,Java 要求其 main 方法是公开的。它是由启动器使用反射调用的,因此理论上,也可以调用非公共main,但启动器实际上会检查公共标志并执行它。 (相比之下,Java 没有entrypoint。方法必须命名为main,必须是静态和公共的,必须返回void(不是int),并且必须采用单个String[] 类型的参数。)
  • CLR 设法调用其他私有方法;是什么让 Main 与众不同,它应该与众不同?

标签: c# clr


【解决方案1】:

CLR 不关心main 的可访问性。 “对外可见”仅适用于代码,不适用于运行时

【讨论】:

    【解决方案2】:

    那不是真的。

    它必须是公开的。例如public static void Main()

    编辑:这是我今天发现和学到的,关于为什么Main 不必是publichttp://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/9184c55b-4629-4fbf-ad77-2e96eadc4d62/

    【讨论】:

      【解决方案3】:

      尝试在您的代码中使用 ildasm 并注意主要方法

      .method private hidebysig static void  Main(string[] args) cil managed
      {
        .entrypoint // this is something the CLR is interested in
      

      【讨论】:

        【解决方案4】:

        你是对的,

        它被标记为入口点。检查这个问题:Why is Main method private?

        【讨论】:

          猜你喜欢
          • 2011-06-10
          • 2011-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-08
          • 2011-01-31
          • 1970-01-01
          • 2014-11-07
          相关资源
          最近更新 更多