C#应用程序具有一个称为Main Method的入口点。它是第一个在应用程序启动时被调用的方法,该方法存在于每个C#可执行文件中。该应用程序可以是控制台应用程序或Windows应用程序。 C#程序最常见的入口点是static void Main()
或static void Main(String []args)
。
Main()方法的不同声明
以下是C#程序中Main方法的有效声明:
- 使用命令行参数:在运行时,它可以接受n个数组类型参数。
例子:
using System; class GFG { // Main Method static public void Main(String[] args) { Console.WriteLine("Main Method"); } }
输出:
Main Method
主要语法的含义:
static: It means Main Method can be called without an object.
public: It is access modifiers which means the compiler can execute this from anywhere.
void: The Main method doesn’t return anything.
Main(): It is the configured name of the Main method.
String []args: For accepting the zero-indexed command line arguments. args is the user-defined name. So you can change it by a valid identifer. [] must come before the args otherwise compiler will give errors. - 没有命令行参数:用户是否要接受命令行参数由用户决定。如果需要命令行参数,则用户必须在Main方法中指定命令行参数。
例子:
using System; class GFG { // Main Method static public void Main() { Console.WriteLine("Main Method"); } }
输出:
Main Method
- 适用的访问修饰符: public,private,protected,internal,protected内部访问修饰符可与Main()方法一起使用。私有受保护的访问修饰符不能与它一起使用。
例子:
using System; class GFG { // Main Method protected static void Main() { Console.WriteLine("Main Method"); } }
输出:
Main Method
例子:
using System; class GFG { // Main Method private protected static void Main() { Console.WriteLine("Main Method"); } }
编译器错误:
More than one protection modifier specified
- 没有任何访问修饰符:默认访问修饰符对Main()方法是私有的。
例子:
using System; class GFG { // Main Method without any // access modifier static void Main() { Console.WriteLine("Main Method"); } }
输出:
Main Method
- 修饰符的顺序:用户还可以在Main()方法中交换静态修饰符和适用修饰符的位置。
例子:
using System; class GFG { // Main Method public static void Main() { Console.WriteLine("Main Method"); } }
输出:
Main Method
例子:
using System; class GFG { // Main Method with swapping of modifiers static internal void Main() { Console.WriteLine("Main Method"); } }
输出:
Main Method
- 返回类型: Main方法也可以具有整数返回类型。从Main()方法返回整数值会使程序获取状态信息。从Main()方法返回的值被视为该过程的退出代码。
例子:
using System; class GFG { // Main Method with int return type static int Main() { Console.WriteLine("Main Method"); // for successful execution of code return 0; } }
输出:
Main Method
例子:
using System; class GFG { // Main Method with int return type static int Main(String[] args) { Console.WriteLine("Main Method"); // for successful execution of code return 0; } }
输出:
Main Method
重要事项:
- Main()方法是C#程序从此处开始执行的入口点。
- Main()方法必须是静态的,因为它是类级别的方法。要在没有任何类实例的情况下调用它,它必须是静态的。非静态Main()方法将给出编译时错误。
- Main()方法不能被覆盖,因为它是静态方法。同样,静态方法不能是虚拟的或抽象的。
- 允许Main()方法的重载。但是在那种情况下,只有一个Main()方法被视为开始执行程序的一个入口点。
示例: Main()方法的有效重载
// C# program to demonstrate the // Valid overloading of Main() // method using System; class GFG { // Main method // it can also be written as // static void Main(String []args) static void Main() { Console.WriteLine("Main Method"); } // overloaded Main() Method static void Main(int n) { Console.WriteLine("Overloaded Main Method"); } // overloaded Main() Method static void Main(int x, int y) { Console.WriteLine("Overloaded Main Method"); } }
输出:
Main Method
警告:
prog.cs(17, 14): warning CS0028: `GFG.Main(int)’ has the wrong signature to be an entry point
prog.cs(23, 14): warning CS0028: `GFG.Main(int, int)’ has the wrong signature to be an entry point示例: Main()方法的无效重载
// C# program to demonstrate the // Invalid overloading of Main() // method using System; class GFG { // Main method // it can also be written as // static void Main() static void Main(String[] args) { Console.WriteLine("Main Method"); } // overloaded Main() Method static void Main() { Console.WriteLine("Overloaded Main Method"); } }
编译错误:
prog.cs(11, 14): error CS0017: Program `5c56b8183078e496102b7f2662f8b84e.exe’ has more than one entry point defined: `GFG.Main(string[])’
prog.cs(17, 14): error CS0017: Program `5c56b8183078e496102b7f2662f8b84e.exe’ has more than one entry point defined: `GFG.Main()’ - 命令行参数的允许类型仅是Main()方法的参数中的String数组。
- Main()方法的允许返回类型为void,int,Task(来自C#7.1)和Task
(来自C#7.1) 。 - 如果Main()方法的返回类型为Task或Task
,则Main()方法的声明可以包含async修饰符。 - C#中的库和服务不需要Main()方法作为入口点。
- 如果一个以上的C#类包含Main()方法,则用户必须使用/ main选项编译该程序,以指定哪个Main()方法将作为入口点。