为什么大多数C#程序中的主方法入口点是静态的?
为什么大多数C#程序中的主方法入口点是静态的?
Program
实例来调用方法Main
。因此,在Main
之前构造函数Program
将运行,这违背了具有main方法的目的。new Program().Main(args)
而不是静态调用并不会完全失去其目的。 - Pete Kirkhamnew Program().Main(args)
,而且根据定义,您无法控制该Program
对象是什么或如何构建它,那么这真的有什么不同于Main
是静态的吗?哪一个更简单、更合乎逻辑、更容易实现呢?为什么我希望语言来决定应该为我实例化什么类型的对象? - Lightness Races in Orbit我会反过来思考这个问题。让Main成为实例方法的功能有什么强制性好处呢?增加功能是代价高昂的;如果没有强制性的好处,那么这个功能就不会被实现。
你有一个非常充分的理由,可以让Main成为实例方法吗?
从概念上讲,您只有一个静态实例。静态方法很好地映射到程序的单个起始点的习惯用语。语言设计者可以创建一个特殊的程序类来使用main方法,但选择创建一个单独的静态函数作为入口点。在某些层面上,这只是一种设计选择。
否则它将不得不创建一个对象,运行构造函数可能会导致负面影响。
否则你怎么能在主函数之前创建类实例呢?
静态方法可以在不创建实例的情况下执行。按照惯例,它们将main
方法作为默认方法进行调用。
.NET runtime
调用 Main
方法。(注意:Main 方法也可以从其他地方调用,例如在 ExampleClass 的另一个方法中的 Main() 代码中。)static
关键字使该方法可在没有 ExampleClass
实例的情况下访问。因此,Main 方法是一个入口点,必须声明为静态。
否则,程序将需要一个实例,但任何实例都需要一个程序。
为了避免这种无法解决的循环依赖
,使用 main 作为入口点。
对于每一个类的对象,都包含主方法、其他方法和变量,每个对象都有其自己的变量和方法的副本,但它们之间只有一个主类的副本,为了在多个对象之间复制一个副本,我们必须将主方法设为静态的。