为什么主要是静态的?

Ind*_*ish 45 c#

我试着public void Main()在C#中创建; 它说没有静态空洞主要发现.静态
到底意味着什么Main?我知道代码可以正常工作public static void Main().

但为什么Main必须这样static

Tho*_*son 56

你需要一个进入你的程序的入口点.静态意味着您可以在不必实例化类的对象/实例的情况下调用该函数.它有点"鸡蛋和鸡蛋"......你不能在进入程序之前实例化一个对象.

可以在不实例化对象的情况下调用静态方法.因此,main()需要保持静态才能使其成为程序的入口.

正如David所说,您只需将关键字添加static到函数定义中即可进行更改.值得研究静态(类)方法与实例方法,并且知道差异有时会很有用.

  • "在你进入程序之前,你无法实例化一个对象."这显然是错误的.运行时在执行"Main"之前实例化大量对象.您可以通过将静态构造函数放入包含"Main"的类来触发它.对不起,我意识到这个帖子是> 1岁但我觉得这是相关的. (32认同)
  • 关键点是:语言定义为不实例化对象,然后在其上调用Main.它被定义为调用静态函数.它可以以不同的方式工作,但不是. (8认同)

Leo*_*ruz 18

只有静态main方法才能完成这项工作,因为有一个定义此行为的约定.没有其他原因.

看一下C#语言规范:

当执行环境调用指定的方法(称为应用程序的入口点)时,将发生应用程序启动.此入口点方法始终命名Main,并且应具有以下签名之一:

     static void Main() {…}  
     static void Main(string[] args) {…}  
     static int Main() {…}  
     static int Main(string[] args) {…}
Run Code Online (Sandbox Code Playgroud)

如图所示,入口点可以选择返回一个int值.此返回值用于应用程序终止(第10.2节).

注:以上引自4 ,现在标签的"历史".目前的版本措辞不同.

除此之外,名称Main可以更改为其他名称.在这种情况下,必须添加编译器选项,告诉C#编译器将不同的方法标记为程序的入口点.

  • 您的答案很好地解释了什么是静态方法.您还解释了主要方法是程序的切入点.但提问者已经知道了.他想知道的是为什么他必须使用静态方法.我的回答说没有根本的宇宙理由.语言设计师选择了这种方式.可能它是其他语言的影响,如C,C++和Java. (9认同)
  • 这是(唯一的!)正确答案.由于[在Programmers.SE上更详细的讨论](http://programmers.stackexchange.com/q/156336/2366)/ cc @ThomasClayson突出显示的原因,其他的都是错误的. (5认同)
  • @ThomasClayson语言设计师可以很好地决定创建一个Program实例并在其上调用Main.我认为这两个答案都是正确的,这是一个设计决定,因为他们考虑到你在答案中所说的内容,恕我直言 (4认同)
  • 我看到你不明白我说的话!这是一个设计决定.算了吧 (2认同)

小智 5

一个类中有两种类型的方法:

  1. 非静态方法
  2. 静态方法

// Example of static and non-static methods and how to call
namespace TestStaticVoidMain
{
    class Program
    {
        Static Void Main(string[] args)
        {
           // Instantiate or create object of the non-static method:
            Exam ob = new Exam();
            // Call the instance:
            ob.Test1();

            // Directly the call the static method by its class:
            Exam.Test2();

            Console.ReadKey();
        }
    }
    class Exam
    {
        public void Test1()
        {
            Console.WriteLine("This is a non-static method");
        }

        public static void Test2()
        {
            Console.WriteLine("This is a static method");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

1.静态方法:

要调用静态方法(函数),我们不需要实例化或创建该方法的对象。我们不能使用new关键字,因为在加载和编译类时,static关键字默认实例化或创建该类方法的对象,这就是我们直接调用静态方法的原因。

关于static void Main(string[] args),我们已经讨论过了static。余数为void Main(string[] args)void是一种不返回任何内容的数据类型。Main()是执行 C# 程序的标准入口点。可选参数string[] args接收程序运行时使用的可选“命令行”参数。

2. 非静态设置:

要调用非静态方法,我们必须实例化或创建类方法的对象,以使用关键字 调用类的方法(函数)new

如果一个名为的类Test有一个名为的非静态方法show(),那么它将如何调用实例:

// to call non-static method
Test ob=new Test();
ob.show();
Run Code Online (Sandbox Code Playgroud)