C#程序之Main()方法
一、Main()方法的简介
1、一般情况下,一个C#可执行程序只有一个应用程序对象(也就是就程序入口),但是在某些情况,可能会有多个应用程序对象(程序入口),如单元测试中,这个时候我们就需要通过命令行指定以哪个Main()方法作为程序的入口。
2、分析Main()方法,我们发现Main()方法通过static修饰,这个主要是让我们可以通过类名加方法的形式吊用Main()方法,我们再调用之前不需要创建对象的实例(也就是new出该对象)
3、分析Main()方法的参数是一个字符串(string[] args),这个参数可以包含任意数量的命令行输入参数
二、Main()方法的的其他形式1、默认情况下,Visual Studio生成的Main()方法有一个void返回值,并且只接收一个参数(一个字符串数组,用于接收任意数量的命令行输入参数)
public static void Main(string[] args) { //方法体 }
但是这不是唯一的Main()方法的形式,以下的Main()方法作为程序的入口点都是被允许的.
//整型返回类型,以字符串数组作为参数 static int Main(string[] args) { return 0; } //没有返回值,没有参数 static void Main() { } //整型返回类型,没有参数 static int Main() { }
注意、如果不给Main()方法提供一个修饰符,那么Main()方法默认就是私有的,当然Main()方法可以定义成共有的,但是Visual Studio会把程序的Main()自动定义成隐式私有的,以确保其他程序不能直接吊用另一个程序的入口点
很明显,选择怎样构造Main()方法要基于两个问题。第一当Main()完成且程序终止时,是否要向系统返回一个值。第二是否需要处理用户提供的命令行参数?如果是,他们将被保存到string数组中。
三、指定应用程序的错误代码
绝大多数的Main()方法会以void作为返回值,但是C#和其他C类型的语言一样,都可以从Main()返回一个int。根据惯例,返回值0表示程序正常结束,而其他值如(-1)表示程序有异常发生(要知道值0是自动返回的,即使Main()方法的原型结构返回为void)
四、在Main()方法中处理用户输入的命令行参数
在Main()方法中获取用户的命令行输入参数有很多中方法
1、通过传递给Main()方法的string[] args的参数中的args引用来对用户输入进行常规的操作
static int Main(string[] args) { for(int i=0;i<args.length;i++) { Console.WriteLine("Arg:{0}",args[i]); } //foreach处理 foreach(string Arg in args) { Console.WriteLine("Arg:{0}",Arg); } }
2、通过VS自带的可视化工具指定命令行参数
3、通过System.Environment的方法来获取命令行参数
static int Main(string[] args) { string[] theArgs=Environment.GetCommandLineArgs();//通过System.Environment类来获取命令行参数 for(int i=0;i<theArgs.length;i++) { Console.WriteLine("Arg:{0}",args[i]); } //foreach处理 foreach(string Arg in theArgs) { Console.WriteLine("Arg:{0}",Arg); } }
相关文章
- C#动态对象(dynamic)示例(实现方法和属性的动态)
- C#实现身份证号码验证的方法
- C#基础-获得当前程序的 空间名.类名.方法名
- 采用异步来实现重新连接服务器或者重新启动服务 C#中类的属性的获取 SignalR2简易数据看板演示 C#动态调用泛型类、泛型方法 asp .net core Get raw request. 从壹开始前后端分离[.NetCore 不定期更新] 38 ║自动初始化数据库
- 如何使用T-SQL备份还原数据库及c#如何调用执行? C#中索引器的作用和实现。 jquery控制元素的隐藏和显示的几种方法。 localStorage、sessionStorage用法总结 在AspNetCore中扩展Log系列 - 介绍开源类库的使用(一) span<T>之高性能字符串操作实测
- .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- C#中泛型方法与泛型接口 C#泛型接口 List<IAll> arssr = new List<IAll>(); interface IPerson<T> c# List<接口>小技巧 泛型接口协变逆变的几个问题
- C#学习记录——抽象类与抽象方法
- c#子线程中打开系统文件操作对话框
- C# 中类对象与JSON字符串互相转换的几种方法
- C# 中xml数组的序列和反序列化方法
- C# 动态加载DLL通过反射调用参数、方法、窗体
- c# Format() 方法
- ASP.NET(C#)常用数据加密和解密方法汇总
- C# FTP常规方法
- 《C#零基础入门之百识百例》(五十)嵌套类和嵌套方法 -- 汉诺塔游戏
- C# 7.0 新特性:模式匹配 ( pattern matching)
- C#用反射判断一个类型是否是Nullable同时获取它的根类型
- C#Winform频繁刷新导致界面闪烁解决方法
- C#四种深拷贝方法
- C# 数组转json
- C# 监测每个方法的执行次数和占用时间(测试1)
- List集合常用方法java与c#