如果我在C#中的主要方法是私有的,为什么我的程序可以工作?

如果我在C#中的主要方法是私有的,为什么我的程序可以工作?,c#,clr,C#,Clr,默认情况下,类中每个成员的类型修饰符都是私有的,甚至Main()函数类型修饰符也是私有的。CLR如何调用外部世界看不见的main方法? 那不是真的 它必须是公开的。例如,公共静态void Main()。 编辑:以下是我今天发现的和学到的,关于为什么Main不必public。 CLR不关心main的可访问性。“对外界可见”只适用于代码,而不适用于运行时。你说得对 它被标记为入口点。检查此问题:尝试在代码中使用ildasm,并查找主要方法 .method private hidebysig sta

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

那不是真的

它必须是公开的。例如,
公共静态void Main()

编辑:以下是我今天发现的和学到的,关于为什么
Main
不必
public

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

你说得对


它被标记为入口点。检查此问题:

尝试在代码中使用ildasm,并查找主要方法

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

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