2018-01-15 22:10:59
一、Main()方法的简介
1、唯一性。一般情况下,一个C#可执行程序只有一个Main函数,作为程序入口。但是在某些情况(如单元测试中),程序拥有多个Main函数,,这个时候我们就需要通过命令行指定以哪个Main()方法作为程序的唯一入口。
2、静态性。Main()方法通过static修饰,这个主要是让我们可以通过类名加方法的形式调用Main()方法,使得我们不需要创建对象的实例(即new出该对象)而直接调用Main函数。使用静态static修饰符的原因:
3、Main的参数。分析Main()方法的参数是一个字符串(string[] args),这个参数可以包含任意数量的命令行输入参数。
4、Main函数的修饰符。一般不加修饰符,默认为private,但可以public修饰符,但编译器在编译时会设置为priavte。
二、Main()方法为什么使用static修饰
假设没有static关键字,那意味着需要用生成一个实例后才可以调用这个Main方法,而Main方法是程序入口点,你没有进入Main方法,自然无法生成一个实例,既然没有实例,那就无法调用Main函数,岂不矛盾?所以Main函数被设置为static。直接通过类名加方法的形式调用Main()方法,使得我们不需要创建对象的实例(即new出该对象)而直接调用Main函数。
三、Main()方法的四种形式
1、无返回值,以字符串数组作为参数
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 } 6 }
2、无返回值,无参数
1 class Program 2 { 3 static void Main() 4 { 5 } 6 }
3、返回int类型数值,以字符串数组作为参数
1 class Program 2 { 3 static int Main() 4 { 5 6 return 0;//返回整数0(0:表示没有出现异常情况正常返回;其他值(非0),表示主函数执行过程中的异常情况。) 7 } 8 }
4、返回int类型数值,无参数
1 class Program 2 { 3 static int Main(string[] args) 4 { 5 return 0;//返回整数0(0:表示没有出现异常情况正常返回;其他值(非0),表示主函数执行过程中的异常情况。) 6 } 7 }
四、Main()的参数string[] args的含义
args是用来处理命令行参数的。命令行参数,就是你运行这个程序的时候给它传的参数。它是可选项,不是必须的。具体使用如下:
1:编写如下程序
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 foreach (string str in args) 6 { 7 Console.WriteLine("Main函数传递的参数args:{0}", str); 8 } 9 Console.ReadKey(); 10 } 11 }
2:编译完成该程序后,在Debug文件中找到该.exe文件,复制到桌面,再复制路径+文件名,然后在命令行模式下输入“C:Usersdwa1124DesktopTest aa bb cc”。运行后我们发现:
3:使用程序启动另一个程序,并传递参数示例如下:
1 /// <summary> 2 /// 被启动程序 3 /// </summary> 4 namespace ConsoleApp1 5 { 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 Console.WriteLine($"args 的入参个数:{args?.Length}"); 11 if (args?.Length > 0) 12 { 13 Console.WriteLine($"args 的全部参数为:{string.Join("," ,args)}"); 14 } 15 16 Console.ReadKey(); 17 } 18 } 19 }
1 /// <summary> 2 /// 使用本程序启动 ConsoleApp1.exe程序 3 /// </summary> 4 namespace ConsoleApp2 5 { 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 try 11 { 12 ProcessStartInfo startInfo = new ProcessStartInfo() 13 { 14 // 将要启动的测试程序路径 15 FileName = $"{AppDomain.CurrentDomain.BaseDirectory}ConsoleApp1.exe", 16 }; 17 18 // 启动时输入的入参(入参的个数是以空格来风格的,如果该入参本身包含空格,则入参需用 "" 包括起来) 19 string arg1 = @"C:Program Files (x86)"; 20 string arg2 = @"C:Users97460source eposConsoleApp5ConsoleApp5inDebug etcoreapp3.1"; 21 startInfo.Arguments = """+arg1+"""; 22 startInfo.Arguments += " "; 23 startInfo.Arguments += """ + arg2 + """; 24 25 // 启动测试程序 26 new Process() {StartInfo = startInfo}.Start(); 27 28 } 29 catch (Exception e) 30 { 31 Console.WriteLine(e.StackTrace); 32 } 33 finally 34 { 35 Console.ReadKey(); 36 } 37 } 38 } 39 }
需要注意:当给被启动程序传递参数时,可以传递多个参数,参数之间使用空格隔开,但当参数本身包含空格时,会把同一个参数当作两个参数去解析。因此,最好把每个参数使用使用引号括起来。下图图1是对args参数未加双引号时被启动参数解析到4个参数,加上双引号后,才正确解析为两个参数: