C# 中的 main() 方法
本文关键字:方法 main 中的 | 更新日期: 2023-09-18 11:27:08
Main()
方法是 .NET 或 .NET Core 平台上控制台和 Windows 应用程序的入口点。它也是 ASP.NET 核心Web应用程序的入口。
运行应用程序时,它会从 Main()
方法开始执行。因此,程序只能有一个Main()
方法作为入口点。
但是,一个类可以有多个Main()
方法,但其中任何一个都可以是应用程序的入口点。
Main()
方法可以通过多种方式定义。以下是Main()
方法的有效签名。
Main() Method Signatures for Entry Point
//parameterless Main() methods
public static void Main() { }
public static int Main() { }
public static async Task Main() { }
public static async Task<int> Main() { }
//Main() methods with string[] parameter
public static void Main(string[] args) { }
public static int Main(string[] args) { }
public static async Task Main(string[] args) { }
public static async Task<int> Main(string[] args) { }
以下是控制台应用程序的默认Main()
方法。
示例: Main() Method
class Program
{
static void Main(string[] args)
{
//program execution starts from here
Console.WriteLine("Command line Arguments: {0}", args.length)
}
}
在上面的示例中,控制台应用程序的执行从 Main()
方法开始。
string[] args
参数包含在从命令提示符/终端执行应用程序时从命令行传递的值。
学习how to pass the command-line arguments to C# console application .
请注意,Main()
方法中不能包含其他类型的参数。例如,下面将抛出 Program 类不包含适用于入口点错误的静态Main
()方法。
Invalid Main() Methods As Entry Point
static void Main(string args) {
}
static void Main(string[] args, int id) {
}
static void Main(bool isStarting) {
}
从 C# 9 (.NET 5) 开始,可以使用top-level statements功能省略Main()
方法。
但是,您只能在一个 cs 文件中编写顶级语句。
示例: Top-level Statements as Entry Point in C# 9
using System;
Console.WriteLine("This is considered as an entry point");
无参数 main() 方法(Parameterless Main() Method)
如果不打算传递任何命令行参数,则 Main()
方法可以是无参数的。例如,下面是作为入口点的有效Main()
方法。
示例: Parameterless Main() Method
class Program
{
static void Main()
{
//program execution starts from here
}
}
main() 方法的返回类型(Return Type of the Main() Method)
Main()
方法可以有void
、int
、Task
或Task<int>
作为返回类型。
返回int
或Task<int>
会将状态信息传达给开始执行的程序。
从Main()
返回 0 将表示成功,返回非零将表示失败。
示例:
static int Main(string[] args)
{
//indicates success
return 0;
}
static int Main(string[] args)
{
//indicates failure
return 1;
}
异步主方法(Asynchronous Main Method)
Main()
方法也可以使用 async 关键字异步。异步Main()
方法的返回类型可以是 Task
或 Task<int>
。
示例: Asynchronous Main() Methods
//Use of Task return type in the Main() method
public static async Task Main()
{
}
public static async Task Main(string[] args)
{
}
public static async Task<int> Main()
{
}
public static async Task<int> Main(string[] args)
{
}
主方法重载 (Overloading of the Main Method )
Main()
方法可以出于不同的目的重载。但是,类或结构只能有一个有效的Main()
方法签名作为入口点;其他Main()
方法可以使用其他签名,如下所示。
示例: Overloading of Main() Method
class Program
{
//entry point
static void Main()
{
Console.WriteLine("This is the entry point");
Main(10);
}
//overload Main method
static void Main(int a)
{
Console.WriteLine(a);
Main(10, 20);
}
//overload Main method
static void Main(int a, int b)
{
Console.WriteLine(a, b);
}
}
下面的示例演示 Main()
方法的无效重载,因为类包含 Main()
方法的两个有效签名作为入口点。
Error: Can't have multiple Main() entry point
class Program
{
//can't have multiple valid Main() entry points
//valid entiry point
static void Main(string[] args)
{
}
//valid entry point
static void Main()
{
}
}
配置启动对象(Configure Startup Object)
如果多个类具有有效的Main()
方法,则可以使用应用程序的 Startup Object
属性将其中任何一个类配置为入口点。
示例: Multiple Main() Methods
namespace MainMethodDemo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Program.Main() Entry Point");
}
}
class WindowProgram
{
static void Main(string[] args)
{
Console.WriteLine("WindowProgram.Main() Entry Point");
}
}
}
在上面的示例中,两个类包含有效的Main()
方法。若要指定哪个Main()
方法应作为入口点,请在解决方案资源管理器中右键单击项目节点,然后单击"Properties
"。然后,在"属性"页和"Application
"选项卡中,在Startup Object
下拉列表中选择应调用其 Main()
方法的类名,如下所示。
配置启动对象
总结:
Main()
方法是程序执行开始和结束的可执行程序的入口点。- 它可以声明为公共、私有、受保护或内部访问修饰符。
- 方法名称必须
Main()
。它不能是任何其他名称。 - 它必须是静态的,并在类或结构中声明。
- 它只能具有
string[]
类型参数。 - 返回类型可以是 void、int、Task 或 Task
。 Main()
方法不能重写,也不能声明为虚拟或抽象。- 允许使用多种
Main()
方法,但只能将一种方法配置为入口点。 - 对于 Windows 应用程序,可以手动添加输入参数,也可以使用
GetCommandLineArgs()
方法来获取命令行参数。 - 在 C# 9 (.NET 5) 中,通过使用类中的顶级语句,可以省略
Main()
方法。
本文内容总结: