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


程序中包含的初始代码为:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace exer
{
class Program
{
static void Main(string[] args)
{
}
}
}
上面代码中,exer是定义的命名空间,与创建的控制台应用程序的名称相同;Main(string[] args)是程序的主方法(或称主函数),即程序的入口,程序将从这里开始执行,也在这里结束;Program是包含Main()方法的类,即上面提到的应用程序对象。
一个控制台应用程序项目中可以存在多个应用程序对象,即可以存在多个Main()方法分布在不同的类中。但是程序每次执行时只能选择启动一个应用程序对象,即只能选择一个Main()方法作为程序的入口。通知编译器将哪个Main()方法作为程序的入口可以在项目属性编辑器的应用程序(Application)选项卡中的启动对象(Startup Object)处设置。

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

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



一、关于Main()方法
Main()方法形式一般如下:
class Program
{
static void Main(string[] args)
{ }
}
其中,static表示Main()方法是一个静态方法;void表示Main()方法返回值为空,是说我们不需要在Main()方法结尾处写上return语句来显示定义一个返回值,但程序在运行结束后还是会自动返回给系统一个表示程序是否正常结束的值(0或其他值,0表示程序正常结束、其他值如-1表示程序有错误发生);Main()方法中有一个字符串数组类型的形式参数,包含程序启动时传递给系统的命令行参数。
除了这种默认的形式,Main()方法还可以是其他的形式。构造什么样的Main()方法需要考虑两个问题:①程序执行结束后是否要向系统返回一个值 ②程序是否需要处理用户提供的命令行参数
class Program //默认形式
{
static void Main(string[] args)
{ }
}
class Program
{ static int Main(string[] args)
{
return ;
}
}
class Program
{
static void Main()
{ }
}
class Program
{
static int Main()
{
return ;
}
}
二、提供给程序命令行参数
Main(string[] args)方法中,用户提供的命令行参数是保存在args字符串数组中的,当提供参数后,在Main()方法中就可以遍历args数组查看这些参数。设置遍历参数的C#语句(也可以使用foreach)。
for(int i=;i<args.Length;i++)
Console.WriteLine("arg:{0}",args[i]);
那么,如何提供给程序这些命令行参数呢?有两种方法。
①Developer Command Prompt命令行中提供参数
打开DCP(开发人员命令提示),切换到程序所在路径,运行已经编译好的exer.exe应用程序同时输入参数,参数可以不包括前缀('\'或'-',当然也可以包含..),以空格分隔。

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


三、代码访问命令行参数的其他方法
当提供给程序命令行参数后,可以使用for或者foreach语句进行args参数的遍历,还可以使用System.Environment类的静态方法GetCommandLineArgs()进行参数的访问。System.Environment.GetCommandLineArgs()返回一个字符串数组,即包含命令行参数的数组。
static void Main(string[] args)
{
Console.WriteLine("From Program!"); //for(int i=0;i<args.Length;i++)
// Console.WriteLine("arg:{0}",args[i]); string[] arr = System.Environment.GetCommandLineArgs();
for(int i=;i<arr.Length;i++)
Console.WriteLine("arg:{0}",arr[i]);
Console.ReadLine();
}

System.Environment.GetCommandLineArgs()返回的字符串数组中,第一个字符串是当前应用程序的完全路径名,其他字符串是用户提供给程序的命令行参数。当使用这种方法获取命令行参数时,Main()括号中可以去掉string[] args形式参数了。
返回目录:C#学习笔记
[C#学习笔记3]关于Main(string[ ] args)中args命令行参数的更多相关文章
- C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例
C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...
- 【Java学习笔记之二十七】Java8中传多个参数时的方法
java中传参数时,在类型后面跟"..."的使用: public static void main(String[] args){ testStringA ...
- Android学习笔记——log无法输出的解决方法和命令行查看log日志
本人邮箱:JohnTsai.Work@gmail.com,欢迎交流讨论. 欢迎转载,转载请注明网址:http://www.cnblogs.com/JohnTsai/p/3983936.html. 知识 ...
- osg学习笔记2, 命令行参数解析器ArgumentParser
ArgumentParser主要负责命令行参数的读取 #include <osgDB/ReadFile> #include <osgViewer/Viewer> int mai ...
- Hadoop源码学习笔记(2) ——进入main函数打印包信息
Hadoop源码学习笔记(2) ——进入main函数打印包信息 找到了main函数,也建立了快速启动的方法,然后我们就进去看一看. 进入NameNode和DataNode的主函数后,发现形式差不多: ...
- Effective STL 学习笔记: 多用 vector & string
Effective STL 学习笔记: 多用 vector & string 如果可能的话, 尽量避免自己去写动态分配的数组,转而使用 vector 和 string . 原书作者唯一想到的一 ...
- 学习笔记GAN004:DCGAN main.py
Scipy 高端科学计算:http://blog.chinaunix.net/uid-21633169-id-4437868.html import os #引用操作系统函数文件 import sci ...
- golang学习笔记 ---命令行参数
os 包以跨平台的方式,提供了一些与操作系统交互的函数和变量.程序的命令行参数可从os包的Args变量获取:os包外部使用os.Args访问该变量. os.Args变量是一个字符串(string)的切 ...
- go学习笔记二:运行使用命令行参数
本文只作为博主的go语言学习笔记. 对命令行参数的解析,只是在运行时使用的,比如以下命令:go run gomain -conf conf.toml 没有办法再go build时使用. 一.运行时命令 ...
随机推荐
- DS控件库 Win7链接列表框的仿Windows开始菜单样式
Win7链接列表框是依照Windows7的开始菜单开发的,同时进行了属性和功能的扩展. 效果图 项属性 控件属性 控件主要事件 点击项(Sender As Win7链接列表框, Itm As 链接项, ...
- MVC设计模式思想及简单实现
一.什么是MVC MVC即Model-View-Controller(模型-视图-控制器)是一种软件设计模式,最早出现在Smalltalk语言中,后被Sun公司推荐为Java EE平台的设计模式. M ...
- 【学习笔记】【Design idea】二、产品内测、公测、候选版本的概念及版本代码的书写
一.前言 参考:百度百科 https://baike.baidu.com/item/beta/640969?fr=aladdin 广义上对测试有着三个传统的称呼:Alpha(α).Beta(β)和Ga ...
- apache kafka & CDH kafka源码编译
Apache kafka编译 前言 github网站kafka项目的README.md有关于kafka源码编译的说明 github地址:https://github.com/apache/kafka ...
- SpringBoot2.0之五 优雅整合SpringBoot2.0+MyBatis+druid+PageHelper
上篇文章我们介绍了SpringBoot和MyBatis的整合,可以说非常简单快捷的就搭建了一个web项目,但是在一个真正的企业级项目中,可能我们还需要更多的更加完善的框架才能开始真正的开发,比如连接池 ...
- CentOS 查看和修改 Mysql 字符集
客户提供了 mysql 的环境,但是不支持中文,通过以下命令查看了 mysql 的字符集 mysql> show variables like 'character_set%'; 显示如下: + ...
- 【jframe】Java架构师之路 - 第01篇:Get Started
jframe是什么? jframe是一个基于MIT协议开源的java web应用程序框架,汇聚了我们团队之于java web应用程序的核心架构思想以及大量最佳实践,并且持续在实际项目中不断完善优化. ...
- PTA 深入虎穴 (正解)和树的同构
在上一篇博客中分享了尝试用单链表修改程序,虽然在Dev上运行没有错误,但是PTA设置的测试点有几个没有通过,具体不清楚问题出现在哪里,所以现在把之前正确的程序放在这里. 7-2 深入虎穴 (30 分) ...
- 微信小程序picker组件关于objectArray数据类型绑定
一.前言: 我发现很多的同学都在抱怨说微信小程序的picker的mode = selector/mode = multiSelector 无法实现Object Array数据类型的绑定,其实很多人就想 ...
- SpringBoot/SpringMVC文件下载方式
本篇文章引用外网博客代码,共描述SpringMVC下三种文件下载方式,本人测试在SpringBoot(2.0以上版本)正常使用. 引用博客,强烈推荐https://www.boraji.com. pa ...