默认情况下,类中每个成员的类型修饰符都是私有的,即使Main()函数的类型修饰符也是私有的。那么CLR如何调用对外不可见的主方法呢?
CLR并不关心main
的可访问性。"对外可见"只适用于代码,而不是运行时。
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint // this is something the CLR is interested in
那不是真的。
必须是公共的。例如:public static void Main()
。
编辑:这是我今天发现并学到的,关于为什么Main
不需要是public
。
http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/9184c55b-4629-4fbf-ad77-2e96eadc4d62/
main
方法为公共方法。它是通过反射由启动器调用的,因此理论上也可以调用非公共的main
方法,但启动器实际上会检查公共标志并强制执行它。(同样相比之下,Java 没有entrypoint
。该方法必须命名为main
,必须是静态和公共的,必须返回void
(而不是int
),并且必须接受一个类型为String[]
的单个参数。) - C. K. Young