`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) { }
```