[C#] 了解过入口函数 Main() 吗?带你用批处理玩转 Main 函数
2016-12-23 10:58
489 查看
了解过入口函数 Main() 吗?带你用批处理玩转 Main 函数
目录
简介特点
方法的参数
方法的返回值
与批处理交互的一个示例
简介
我们知道,新建一个控制台应用程序的时候,IDE 会同时创建一个默认的类 Program.cs,该类会包含一个 Main 方法。我们在直接 F5 的时候就会立即执行里面的语句。但是,你自己有认真了解过它吗。
Main方法是 C# 控制台应用程序和 Windows 窗体应用程序的入口点(也称切入点)。应用程序启动时,
Main方法是第一个调用的方法。程序中只能,只允许有一个入口点,如果有许多类都包含
Main方法,则必须使用 /main 编译器选项编译该程序,并选定用作入口点的
Main方法。
【备注】库和服务并不要求
Main方法作为入口点。
这也许是你刚入门 C# 的其中一个示例。
class MyClass { static void Main(string[] args) { //输出命令行的参数长度 WriteLine(args.Length); } }
【备注】这里没有指定访问修饰符,默认的访问级别为 private。
特点
它是 .exe 程序的入口点(切入点),程序控制流在此处开始和结束。它在类或结构内声明。 它必须是静态的,且不应该 public。
它的返回类型有两种:
void和
int。
它可以包含命令行实参的
string[]形参,也可以没有形参。 使用 VS 创建 Windows 窗体应用程序时,你可以选择手动添加形参,当然,也可以选择使用 Environment 这样的类来读取 CMD 的实参。
【备注】这里的它指 Main 方法。
方法的参数
你可以通过这样的方式,将参数发送到Main方法。
static void Main(string[] args) static int Main(string[] args)
【备注】想在 Windows 窗体应用程序中的
Main方法中启用 CMD 参数,你还得手动修改 Program.cs 类里面
Main方法的签名。 因为,Windows 窗体设计器它自动生成的代码中,所包含的
Main 方法默认是不带参数的。 当然,你也可以用类似 Environment.GetCommandLineArgs 等方式从 CMD 或 Windows 应用程序中的任意位置访问 CMD 参数。
参数 string[] args 是表示 CMD 参数的一个 String 数组。我们一般是通过判断
Length属性来确定参数是否存在。请看:
if (args.Length == 0) { WriteLine("Hello World."); return 1; }
也可以使用
Parse方法将参数转换为数值类型。 请看:
//结果是一样的 long num = Int64.Parse(args[0]); long num = long.Parse(args[0]); //Int64 的别名 long num = Convert.ToInt64(args[0]); //Convert 类
方法的返回值
它可以返回 void,也可以是 int。static void Main() { //... } //返回类型:int static int Main() { //... return 0; }
如果不希望
Main的拥有返回值,你可以使用返回
void简化代码。 但是,如果返回整数,则该程序可以与调用该 .exe 文件的其他程序或脚本进行信息交互。
与批处理交互的一个示例
我打算使用一个批处理文件来执行程序,来测试Main函数的返回值。 在 Windows 中执行你的程序时,
Main函数会将返回的值存放到一个名字叫
ERRORLEVEL的环境变量中。 通过 check 这个名字叫
ERRORLEVEL的环境变量,批处理文件可以知道自己的执行结果。 通常,我们会以返回值为 0 来表示执行成功。
下面是一个简单示例,从
Main函数返回 0(0 表示程序运行成功)。 我将它命名为 MyMainTest.cs(修改了 Program.cs 的名字)。
class MyMainTest { static int Main(string[] args) { //TODO: Other return 0; } }
写好后定位到包含 MyMainTest.cs 的文件夹。
我在里面新增了一个名为 yourTest.bat 的批处理文件。代码你可以直接粘贴:
rem yourTest.bat @echo off MyMainTest @if "%ERRORLEVEL%" == "0" goto ok :fail echo Execution Failed echo return value = %ERRORLEVEL% goto end :ok echo Execution succeeded echo Return value = %ERRORLEVEL% goto end :end
注意,不要双击,因为是直接闪退看不到效果的。我们先打开 CMD,并定位到你的目录:
接着,执行命令:csc MyMainTest.cs。这时,你就会看到自动帮你编译并生成了 MyMainTest 的可执行文件。
最后,我们再次在命令行中执行 yourTest.bat,就可以看到结果了。
C# 基础回顾系列
《C# 知识回顾 - 序列化》《C# 知识回顾 - 表达式树 Expression Trees》
《C# 知识回顾 - 特性 Attribute》、《剖析 AssemblyInfo.cs - 了解常用的特性 Attribute》
《C# 知识回顾 - 委托 delegate》、《C# 知识回顾 - 委托 delegate (续)》
《C# 知识回顾 - 事件入门》、《C# 知识回顾 - Event 事件》
《string 与 String,大 S 与小 S 之间没有什么不可言说的秘密》
《C# 知识回顾 - 你真的懂异常(Exception)吗?》
【博主】反骨仔
【出处】http://www.cnblogs.com/liqingwen/p/6213624.html
【参考】微软官方文档
相关文章推荐
- main 函数的入口参数
- winform程序不一定要用Main() 函数做入口
- main WinMain入口函数比较
- C#调用C(C++)dll示例教程,包含dll找不到函数入口的解决办法,包含C#dll调用方式不对出错的解决办法
- C#调用C++函数入口点的问题 z
- C# 程序入口(Main)
- java入口函数为什么是public static void main(String args[])
- 如何为WPF添加Main()函数 程序入口点的修改
- main WinMain入口函数比较
- main WinMain入口函数比较
- C#中程序的入口点Main方法
- 你所未必了解的main()函数的事情
- C++ VS C#(6):入口函数,改变形参数值
- 第三次讲座盲点整理(编译与链接)——入口函数一定是main?
- C++修改入口函数名Main的方法
- vc++ main系列入口函数
- C++ VS C#(6):入口函数,改变形参数值
- 入口函数 main 和 WinMain 的返回值
- 玩转PHP必了解的PHP常用符号和函数
- Java中static方法、程序入口函数main方法的继承问题