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

dot*_*ner 44 c# static

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

static void Main(string[] args)
Run Code Online (Sandbox Code Playgroud)

Mar*_*off 63

成员函数不具有是静态的; 但如果它们不是静态的,则需要您实例化一个Program对象以调用成员方法.

使用静态方法:

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

    public static string Foo()
    {
        return "Foo";
    }
}
Run Code Online (Sandbox Code Playgroud)

没有静态方法(换句话说,要求您实例化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";
    }
}
Run Code Online (Sandbox Code Playgroud)

Main必须是静态的,否则你必须告诉编译器如何实例化Program类,这可能是也可能不是一项简单的任务.


Ars*_*yan 24

你也可以编写非静态方法,只需要像这样使用

static void Main(string[] args)
{
    Program p = new Program();
    p.NonStaticMethod();
}
Run Code Online (Sandbox Code Playgroud)

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


Joh*_*n K 11

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

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

但是,如果您创建任何类的实例,甚至是Program类本身的实例,那么您开始在应用程序的堆内存区域中创建对象.然后,您可以开始调用其实例成员.


Car*_*ñoz 5

并非所有方法都必须是静态的,您可以添加实例方法并创建Program类的实例.
但是对于Main来说它必须是静态的,因为它是你的应用程序的入口点,没有人会创建一个实例并调用它.