为什么我的程序在C#中Main方法是私有的情况下可以工作?

3

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


也许可以通过反射实现? - Uwe Keim
1
相比之下,Java 要求其 main 方法为公共方法。它是通过反射由启动器调用的,因此理论上也可以调用非公共的 main 方法,但启动器实际上会检查公共标志并强制执行它。(同样相比之下,Java 没有 entrypoint。该方法必须命名为 main,必须是静态和公共的,必须返回 void(而不是 int),并且必须接受一个类型为 String[] 的单个参数。) - C. K. Young
2
CLR可以调用其他私有方法,那么使Main方法与众不同的是什么? - Eric Lippert
4个回答

7

CLR并不关心main的可访问性。"对外可见"只适用于代码,而不是运行时


3
尝试在您的代码上使用ildasm,并寻找主方法。
.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint // this is something the CLR is interested in

3

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接