[C#学习笔记3]关于Main(string[ ] args)中args命令行参数

Main(string[] args)方法是C#程序的入口,程序从这里开始执行,在这里结束。C#代码逻辑要包含在一个类型(Type)中,游离的、全局的变量或函数是不存在的,这里的类型包括类(class)、接口(interface)、结构(struct)、枚举(enum)和委托(delegate)。Main()方法包含在一个类中,这个类的默认名字叫作Program,包含Main()的类叫作应用程序对象(Application Object)。新建一个控制台应用程序(ConsoleApplication)。

  新建一个控制台应用程序

  初始程序

程序中包含的初始代码为:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace exer
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13         }
14     }
15 }

上面代码中,exer是定义的命名空间,与创建的控制台应用程序的名称相同;Main(string[] args)是程序的主方法(或称主函数),即程序的入口,程序将从这里开始执行,也在这里结束;Program是包含Main()方法的类,即上面提到的应用程序对象。

一个控制台应用程序项目中可以存在多个应用程序对象,即可以存在多个Main()方法分布在不同的类中。但是程序每次执行时只能选择启动一个应用程序对象,即只能选择一个Main()方法作为程序的入口。通知编译器将哪个Main()方法作为程序的入口可以在项目属性编辑器的应用程序(Application)选项卡中的启动对象(Startup Object)处设置。

  Startup object

下面编写两个应用程序对象,并分别启动测试,代码如下。其中,将用不到的using引用删去了;Console.ReadLine()方法用来从控制台接收键盘输入的一段以回车符结束的字符串,这里起到暂停控制台的作用(否则调试程序时,控制台会一闪而过!),但也可以不调试程序而是直接运行,就不会出现一闪而过的情况了。

 1 using System;
 2 
 3 namespace exer
 4 {
 5     class Program
 6     {
 7         static void Main(string[] args)
 8         {
 9             Console.WriteLine("From Program!");
10             Console.ReadLine();
11         }
12     }
13 
14     class AnotherProgram
15     {
16         static void Main(string[] args)
17         {
18             Console.WriteLine("From AnotherProgram!!");
19             Console.ReadLine();
20         }
21     }
22 }

调试程序,编译器报错。

error

打开项目属性编辑器,在应用程序(Application)选项卡中的启动对象(Startup Object)下拉框中选择程序入口点,分别运行程序,查看结果。

  在Startup object下拉框处选择应用程序对象

  FromProgram

  FromAnotherProgram


一、关于Main()方法

  Main()方法形式一般如下:

1     class Program
2     {
3         static void Main(string[] args)
4         {
5 
6         }
7     }

  其中,static表示Main()方法是一个静态方法;void表示Main()方法返回值为空,是说我们不需要在Main()方法结尾处写上return语句来显示定义一个返回值,但程序在运行结束后还是会自动返回给系统一个表示程序是否正常结束的值(0或其他值,0表示程序正常结束、其他值如-1表示程序有错误发生);Main()方法中有一个字符串数组类型的形式参数,包含程序启动时传递给系统的命令行参数。

  除了这种默认的形式,Main()方法还可以是其他的形式。构造什么样的Main()方法需要考虑两个问题:①程序执行结束后是否要向系统返回一个值 ②程序是否需要处理用户提供的命令行参数

 1     class Program  //默认形式
 2     {
 3         static void Main(string[] args)
 4         {
 5 
 6         }
 7     }
 8     class Program
 9     {


10 static int Main(string[] args) 11 { 12 return 0; 13 } 14 } 15 class Program 16 { 17 static void Main() 18 { 19 20 } 21 } 22 class Program 23 { 24 static int Main() 25 { 26 return 0; 27 } 28 }

 

二、提供给程序命令行参数

  Main(string[] args)方法中,用户提供的命令行参数是保存在args字符串数组中的,当提供参数后,在Main()方法中就可以遍历args数组查看这些参数。设置遍历参数的C#语句(也可以使用foreach)。

1             for(int i=0;i<args.Length;i++)
2                 Console.WriteLine("arg:{0}",args[i]);

  那么,如何提供给程序这些命令行参数呢?有两种方法。

  ①Developer Command Prompt命令行中提供参数

  打开DCP(开发人员命令提示),切换到程序所在路径,运行已经编译好的exer.exe应用程序同时输入参数,参数可以不包括前缀('\'或'-',当然也可以包含..),以空格分隔。

    命令行输入参数

  ②Visual Studio项目属性编辑器中指定命令行参数,同样以空格分隔

    Visual Studio项目属性编辑器中设置命令行参数

    vs输入参数

 

三、代码访问命令行参数的其他方法

  当提供给程序命令行参数后,可以使用for或者foreach语句进行args参数的遍历,还可以使用System.Environment类的静态方法GetCommandLineArgs()进行参数的访问。System.Environment.GetCommandLineArgs()返回一个字符串数组,即包含命令行参数的数组。

 1         static void Main(string[] args)
 2         {
 3             Console.WriteLine("From Program!");
 4 
 5             //for(int i=0;i<args.Length;i++)
 6             //    Console.WriteLine("arg:{0}",args[i]);
 7 
 8             string[] arr = System.Environment.GetCommandLineArgs();
 9             for(int i=0;i<arr.Length;i++)
10                 Console.WriteLine("arg:{0}",arr[i]);
11             Console.ReadLine();
12         }

  Environment.GetCommandLineArgs访问命令行参数

  System.Environment.GetCommandLineArgs()返回的字符串数组中,第一个字符串是当前应用程序的完全路径名,其他字符串是用户提供给程序的命令行参数。当使用这种方法获取命令行参数时,Main()括号中可以去掉string[] args形式参数了。

 


返回目录:C#学习笔记

posted @ 2018-11-06 19:52  wangmengdx  阅读(7192)  评论(3编辑  收藏  举报