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

时间:2010-03-02 21:34:54

标签: c# language-implementation

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

8 个答案:

答案 0 :(得分:60)

为了调用实例方法,您需要一个对象的实例。这意味着为了启动您的程序,CLR需要创建一个说Program的实例,以便调用方法Main。因此Program的构造函数将在Main之前运行,这违背了完全使用main的目的。

答案 1 :(得分:16)

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

您是否有充分的理由认为应该允许Main作为实例方法?

答案 2 :(得分:4)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

可以在不创建实例的情况下执行静态方法。按照惯例,他们使用main方法作为默认方法来调用。

答案 6 :(得分:0)

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

  

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

为避免将无法解析的 {{1}} main用作切入点


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

答案 7 :(得分:-3)

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