[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时使用. 一.运行时命令 ...
随机推荐
- TensorFlow从1到2(五)图片内容识别和自然语言语义识别
Keras内置的预定义模型 上一节我们讲过了完整的保存模型及其训练完成的参数. Keras中使用这种方式,预置了多个著名的成熟神经网络模型.当然,这实际是Keras的功劳,并不适合算在TensorFl ...
- WebRTC系列(1)-手把手教你实现一个浏览器拍照室Demo
1.WebRTC开发背景 由于业务需求,需要在项目中实现实时音视频通话功能,之前基于浏览器开发的Web项目要进行音视频通话,需要安装flash插件才能实现或者使用C/S客户端进行通信.随着互联网技术的 ...
- vue + element + 初始化项目
前提:已经安装了好了npm 和 vue脚手架 注意: 进入想要放置项目的目录下. 1.vue init webpack sun-vue-element 2.根据提示输入 y/n 3.npm run d ...
- WebStorm出现中文乱码解决代码
今天用WebStorm运行html代码时,出现中文乱码,试了Settings里File Encodings,将编码形式改为utf-8,结果还是不行. 最后用代码解决了问题,代码如下: <meta ...
- RFI to RCE challenge
http://www.zixem.altervista.org/RCE/level1.php 构造payload: https://zixem.altervista.org/RCE/level1.ph ...
- arcgis api 4.x for js 离线部署
在我的GIS之家群里,经常遇到 webgis 开发新手们提问 arcgis api for js 如何本地离线部署,而不是直接调用在线的,因为在线模式依赖互联网以及网速环境因素,受到的限制影响比较大. ...
- openlayers4 入门开发系列之批量叠加 zip 压缩 SHP 图层篇(附源码下载)
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- idea配github
下面步骤的三个前提条件:安装git 安装idea 注册github账号 步骤一.绑定我的github账号与我的计算机 绑定我的github账号与我的计算机之后,便能很方便地上传或者更新我的代码,这需要 ...
- CI持续集成系列之(九)代码发布脚本模板书写
前言 前面我们介绍了Jenkins来发布项目通过nginx来展示流程,那里只是提供了一个简单的测试脚本,接下来呢介绍一下一个比较完善的发布脚本,该脚本可实现从gitlab服务器获取代码,打包,部署到W ...
- python3 变量理解 解释器理解 常量理解 用户交互理解 逻辑运算
先来条NLP再说...... 九,每人都已经具备使自己快乐的资源 每一个人都有过成功快乐的体验,也即是说有使自己快乐的能力. 人类只用了大脑能力极少部分,提升大脑的运用,很多新的突破便会出现. 运用大 ...