38

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

4

8 回答 8

60

为了调用实例方法,您需要一个对象的实例。这意味着为了启动您的程序,CLR 需要创建 say 的实例Program才能调用该方法Main。因此,构造函数Program将在它之前运行,Main这完全违背了拥有一个主要的目的。

于 2010-03-02T21:36:31.077 回答
16

我会把问题转过来。实现允许 Main 成为实例方法的功能有什么引人注目的好处?功能很昂贵;如果没有令人信服的好处,它们就不会得到实施。

您是否有充分的理由允许 Main 成为实例方法?

于 2010-03-03T01:05:40.473 回答
4

从概念上讲,您只有一个静态实例。静态方法很好地映射到程序的单一起点的习惯用法。语言设计者本可以创建一个特殊的程序类来与 main 方法一起使用,但选择创建一个静态函数作为入口点。在某些层面上,它实际上只是一种设计选择。

于 2010-03-02T21:39:28.910 回答
1

因为否则它将必须创建一个对象,并且运行构造函数可能会导致负面影响。

于 2010-03-02T21:35:48.970 回答
1

否则你怎么能在 main 之前创建你的类实例?

于 2010-03-02T21:36:17.177 回答
0

无需创建实例即可执行静态方法。按照惯例,它们将该main方法作为默认调用方法。

于 2010-03-02T21:45:13.420 回答
0

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

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

为了避免无法解决circular dependency的 main 被用作入口点


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

于 2010-03-02T21:49:03.810 回答
-3

对于一个类的每个对象都包含主方法和其他方法和变量,所有对象包含的每个变量和方法都有单独的副本,但是主类副本只是它们之间的一个副本,因此要在我们拥有的多个对象之间进行复制将主要方法设为静态。

于 2011-07-27T09:20:36.247 回答