`Main`方法是 C# 應用程序的入口點。 (庫和服務不要求使用`Main`方法作為入口點)。`Main`方法是應用程序啟動后調用的第一個方法。
```
class TestClass
{
static void Main(string[] args)
{
// Display the number of command line arguments.
Console.WriteLine(args.Length);
}
}
```
自 C# 9 起,可以省略`Main`方法,并像在`Main`方法中一樣編寫 C# 語句,如下面的示例所示:
```
using System.Text;
StringBuilder builder = new();
builder.AppendLine("Hello");
builder.AppendLine("World!");
Console.WriteLine(builder.ToString());
```
## 總結
* `Main`方法是可執行程序的入口點,也是程序控制開始和結束的位置。
* `Main`在類或結構中聲明。`Main`必須是[`static`](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/static),它不需要是[`public`](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/public)。 (在前面的示例中,它獲得的是[`private`](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/private)成員的默認訪問權限)。封閉類或結構不一定要是靜態的。
* `Main`可以具有`void`、`int`,或者以 C# 7.1、`Task`或`Task<int>`返回類型開頭。
* 當且僅當`Main`返回`Task`或`Task<int>`時,`Main`的聲明可包括[`async`](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/async)修飾符。 這明確排除了`async void Main`方法。
* 使用或不使用包含命令行自變量的`string[]`參數聲明`Main`方法都行。 使用 Visual Studio 創建 Windows 應用程序時,可以手動添加此形參,也可以使用[GetCommandLineArgs()](https://docs.microsoft.com/zh-cn/dotnet/api/system.environment.getcommandlineargs#system-environment-getcommandlineargs)方法來獲取命令行實參。 參數被讀取為從零開始編制索引的命令行自變量。 與 C 和 C++ 不同,程序的名稱不被視為`args`數組中的第一個命令行實參,但它是[GetCommandLineArgs()](https://docs.microsoft.com/zh-cn/dotnet/api/system.environment.getcommandlineargs#system-environment-getcommandlineargs)方法中的第一個元素。
```
public static void Main() { }
public static int Main() { }
public static void Main(string[] args) { }
public static int Main(string[] args) { }
public static async Task Main() { }
public static async Task<int> Main() { }
public static async Task Main(string[] args) { }
public static async Task<int> Main(string[] args) { }
```