c#:控制台应用程序 – 静态方法

为什么在C#中,控制台应用程序中,在“程序”类中,这是默认的,所有的方法都必须是静态的

static void Main(string[] args) 

成员函数不一定是静态的; 但是如果它们不是静态的,就需要实例化一个Program对象来调用成员方法。

用静态方法:

 public class Program { public static void Main() { System.Console.WriteLine(Program.Foo()); } public static string Foo() { return "Foo"; } } 

没有静态方法(换句话说,要求你实例化Program ):

 public class Program { public static void Main() { System.Console.WriteLine(new Program().Foo()); } public string Foo() // notice this is NOT static anymore { return "Foo"; } } 

Main必须是静态的,否则就不得不告诉编译器如何实例化Program类,这可能是也可能不是一件小事。

你也可以写非静态方法,就像你这样使用

 static void Main(string[] args) { Program p = new Program(); p.NonStaticMethod(); } 

C#应用程序的唯一要求是可执行程序集应该在程序集中的任何类中都有一个静态main方法!

Main方法是静态的,因为它是程序集的代码入口点。 首先没有任何对象的实例,只有内存中加载的类模板及其静态成员(包括Main入口点静态方法)。 Main由C#编译器预定义为入口点。

一个静态方法只能调用其他静态方法(除非有一个用于合成的实例句柄)。 这就是Main方法调用其他静态方法的原因,以及为什么如果尝试调用非静态(实例)方法时出现编译错误。

但是,如果您创build了任何类的实例,即使是Program类本身,也可以在应用程序中的内存堆区域中创build对象。 然后你可以开始调用他们的实例成员。

并不是所有的方法都是静态的,你可以添加实例方法,也可以创build一个Program类的实例。
但是对于Main而言,它必须是静态的,因为它是应用程序的入口点,没有人会创build实例并调用它。

所以,技术上正确的答案是:)

我应该指出,一般来说,你不想走在所有静态方法的方向。 创build一个对象,像Windows窗体,控制器,并转向面向对象的代码,而不是程序。