为什么这个程序的静态 void Main(string[] args) 在底部?

4

我正在学习C#,教程上说:“当您运行程序时,C#会寻找名为Main的方法。它使用Main方法作为程序的起点。然后执行两个花括号之间的任何代码。“

但在另一个教程网站上,有一段代码:

using System;
namespace RectangleApplication
{
   class Rectangle 
   {
     // member variables
     double length;
     double width;

     public void Acceptdetails()
     {
        length = 4.5;    
        width = 3.5;
     }

     public double GetArea()
     {
        return length * width; 
     }

     public void Display()
     {
        Console.WriteLine("Length: {0}", length);
        Console.WriteLine("Width: {0}", width);
        Console.WriteLine("Area: {0}", GetArea());
     }
   }

class ExecuteRectangle 
{
  static void Main(string[] args) 
     {
         Rectangle r = new Rectangle();
         r.Acceptdetails();
         r.Display();
         Console.ReadLine(); 
      }
   }
}

在下面的Main方法中,有其他方法。(我是新手,所以我假设public void acceptdetails、get area和display都是方法)。我的问题是,为什么它不在顶部紧接着命名空间下面呢?我把这个方法放在那里,它也能正常工作,检查了这里的其他帖子,它说可能作者只是想强调其他事情,但我不完全理解为什么。

3个回答

5
无论你把它放在哪里都没关系。当程序第一次运行时,Main()总是入口点。像Main()这样的函数可以放在代码中的任何地方,只要编译器能够编译和语法正确,它就会从那里开始运行。
从以上代码看,作者有意将Main()函数放在源代码底部来说明这一点。

“entry point”是什么意思?入口点不应该在顶部吗? - Aspiring Coder 2.0
入口点就是执行开始的地方,通常情况下是在Main()函数内的第一行。这里发生的第一件事是为一个新的矩形对象分配空间,代码如下:Rectangle r = new Rectangle(); - Brad C
哦,所以它会从Main开始无论它在哪里,然后因为下一行是第一个类的名称,所以它跳到了那个第一个类?另外,我在某个地方读到说Main只在1%的程序中使用,为什么会这样? - Aspiring Coder 2.0
正确!继续学习控制流、基本程序结构和函数,这将使你更加理解。 - Brad C

2

Main()是一种“特殊”的函数,它作为程序的入口点,即使它不是代码清单中的第一个。在上面的代码中,程序员首先放置了Rectangle类的声明,但这并不影响哪些代码先运行。Main()先运行。这就是语言设计的方式。


0

我猜你的困惑是,如果C#逐行执行语句,为什么主方法不在开头。好吧,它不必在开头,因为这就是编译器为你做的事情。编译器查找入口点以找出执行的第一行。它通过名称“main”方法来查找。这就是为什么你不能在应用程序中有多个方法的原因之一。因为编译器会“困惑”,无法决定从哪里进入。

一旦进入主方法,它就开始逐行执行。如果发现任何方法调用,它会再次开始查找方法名称,进入该方法,逐行执行并返回到离开的主方法的位置。

因此,正如你可能已经看到的那样,无论你将代码放在代码文件的哪个位置,编译器仍然逐行执行。

当然,我省略了并行编程或异步操作的高级情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接