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

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

为了调用一个实例方法,你需要一个对象的实例。 这意味着为了启动你的程序,CLR需要创build一个说Program的实例来调用Main方法。 因此, Program的构造者将在Main之前运行,这完全破坏了Main的目的。

我会绕过这个问题。 实现允许Main作为实例方法的function有什么好处? 特点是昂贵的; 如果没有令人信服的好处,他们不会得到执行。

你有一个很好的理由,为什么主要应该被允许是一个实例方法?

从概念上讲,你只有一个静态实例。 静态方法很好地映射到程序的单一起始点的习惯用法。 语言devise者可以创build一个特殊的程序类来使用主要方法,但是select创build一个静态函数作为入口点。 在某些层面上,它只是一个deviseselect。

因为否则它将不得不创build一个对象,运行构造函数可能会导致负面的副作用。

你怎么能在main之前创build你的类实例呢?

.NET runtime调用Main方法。 (注意:Main也可以从其他地方调用,例如在ExampleClass的另一个方法中从Main()代码)。static关键字使方法可以访问而不需要ExampleClassinstance 。 所以Main方法是一个入口点,必须声明为静态的。

否则,程序将需要一个实例,但任何实例都需要一个程序。

为了避免不可parsing的circular dependency main被用作入口点


参考: http : //en.wikipedia.org/wiki/C_Sharp_(programming_language

可以在不创build实例的情况下执行静态方法。 按照惯例,它们具有作为默认方法调用的main方法。

对于类的每个对象都包含main方法和其他方法和variables,每个variables和每个对象所包含的方法都有独立的副本,但是一个主类副本只是它们之间的一个副本,所以在这些对象之间进行拷贝使主要方法静态化。