为什么大多数C#程序中的主要方法入口点是静态的?

Ton*_*ion 37 c# language-implementation

为什么大多数C#程序中的主要方法入口点是静态的?

Jar*_*Par 60

为了调用实例方法,您需要一个对象的实例.这意味着为了启动程序,CLR需要创建一个say实例Program才能调用该方法Main.因此,在Program之前运行的构造函数会Main破坏完全使用main的目的.

  • 但这意味着仍然会调用静态构造函数? (9认同)
  • @Yuriy,是的.它在C#语言规范的第10.11节中特别指出.我不知道为什么做出这个决定(可能是从CLR级别强制执行) (3认同)
  • 拥有main的目的是为应用程序定义一个入口点.将入口点定义为框架调用`new Program().Main(args)`而不是静态调用根本不会破坏目的. (2认同)
  • 原因是因为这就是java的方式.在创建Java时,仍然认为对于许多工作,对象可能会被放弃.您可能在没有堆(只是堆栈)的芯片上有一个JVM - 他们不希望(或不能)实例化单个类.C#当时是Java的一个非常直接的副本,尽管它自那以后增加了更多的增强功能,但由于C#无法在这样的环境中运行,因此让它使用带有(args)参数的构造函数是合理的. (2认同)

Eri*_*ert 16

我转过身来.实现允许Main作为实例方法的功能有什么令人信服的好处?功能昂贵; 如果没有令人信服的好处,他们就不会得到实施.

你有一个很好的理由为什么Main应该被允许成为一个实例方法?