type
status
date
slug
summary
tags
category
icon
password
Main
方法是 C# 应用程序的入口点。 (库和服务不要求使用 Main
方法作为入口点)。Main
方法是应用程序启动后调用的第一个方法。当有多个
Main
入口时,我们需要指定入口:或
其中
Program
是包含 Main
方法的类型。 提供的类名必须是完全限定类名;它必须包括完整命名空间(包含类),后跟类名。 例如,当 Main
方法位于 MyApplication.Core
命名空间中的 Program
类中时,编译器选项必须为 -main:MyApplication.Core.Program
。 如果编译包含具有 Main
方法的多个类型,则可以指定哪个类型包含 Main
方法。自 C# 9 起,可以省略
Main
方法,并像在 Main
方法中一样编写 C# 语句,如下面的示例所示:若要了解如何使用隐式入口点方法编写应用程序代码,请参阅:
1、概述
Main
方法是可执行程序的入口点,也是程序控制开始和结束的位置。
Main
在类或结构中声明。Main
必须是static
,它不需要是public
。封闭类或结构不一定要是静态的。
Main
的返回类型可以是void
、int
、Task
或Task<int>
。
- 当且仅当
Main
返回Task
或Task<int>
时,Main
的声明可包括async
修饰符。除了使用Task
或Task<int>
返回值,其余情况下不得使用async
修饰符。
- 使用或不使用包含命令行自变量的
string[]
参数声明Main
方法都行。
以下列表显示了有效的
Main
签名:- 上述示例均使用
public
访问器修饰符。 这是典型操作,但不是必需的。
- 添加 async
、Task
和 Task<int>
返回类型可简化控制台应用程序需要启动时的程序代码,以及 Main
中的 await
异步操作。具体实现查看后文。2、Main()函数的返回值
从
Main()
函数中返回int
值可以使用如下方法:如果不使用
Main
的返回值,则返回 void
或 Task
可使代码变得略微简单:不过,返回
int
或 Task<int>
可使程序将状态信息传递给调用可执行文件的其他程序或脚本。3、Async Main 返回值
我们在不使用Async修饰返回值时,就需要使用
异步方法.GetAwaiter().GetResult();
这串长代码来确保在异步方法未执行完前程序关闭。例如代码:我们使用async修饰Main方法:
就可以在调用异步操作时就可以少写很多代码。
在程序报出类似:
private static void $GeneratedMain() => Main().GetAwaiter().GetResult();
异常时,极大可能就是因为异步操作没有处理好。上面的代码是在Main方法有返回值的时候展示的,下面是各种情况下有无返回值的写法(参数无影响):
Main 方法代码 | Main 签名 |
无返回值,不使用 await | static void Main() |
返回值,不使用 await | static int Main() |
无返回值,使用 await | static async Task Main() |
返回值,使用 await | static async Task<int> Main() |
- 作者:Rainvice
- 链接:https://rainvice.com/article/7c7c374e-44d7-46d3-8871-6f1b92616ba0
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。