C# Main方法概述
00 分钟
2023-9-14
2023-9-15
type
status
date
slug
summary
tags
category
icon
password
Main 方法是 C# 应用程序的入口点。 (库和服务不要求使用 Main 方法作为入口点)。Main 方法是应用程序启动后调用的第一个方法。
C# 程序中只能有一个入口点。 如果多个类包含 Main 方法,必须使用 StartupObject 编译器选项来编译程序,以指定将哪个 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 的返回类型可以是 voidintTask 或 Task<int>
  • 当且仅当 Main 返回 Task 或 Task<int> 时,Main 的声明可包括 async 修饰符。除了使用Task Task<int> 返回值,其余情况下不得使用async修饰符。
  • 使用或不使用包含命令行自变量的 string[] 参数声明 Main 方法都行。
以下列表显示了有效的 Main 签名:
💡
- 上述示例均使用 public 访问器修饰符。 这是典型操作,但不是必需的。 - 添加 asyncTask 和 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()
 
上一篇
顶级语句
下一篇
C#语言介绍

评论
Loading...