zoukankan      html  css  js  c++  java
  • [C#] 了解过入口函数 Main() 吗?带你用批处理玩转 Main 函数

    了解过入口函数 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 方法。

    1   static void Main(string[] args)
    2 
    3   static int Main(string[] args)

      【备注】想在 Windows 窗体应用程序中的 Main 方法中启用 CMD 参数,你还得手动修改 Program.cs 类里面 Main 方法的签名。 因为,Windows 窗体设计器它自动生成的代码中,所包含的 Main 方法默认是不带参数的。 当然,你也可以用类似 Environment.GetCommandLineArgs 等方式从 CMD 或 Windows 应用程序中的任意位置访问 CMD 参数。

      

      参数 string[] args 是表示 CMD 参数的一个 String 数组。我们一般是通过判断 Length 属性来确定参数是否存在。请看:

    1         if (args.Length == 0)
    2         {
    3             WriteLine("Hello World.");
    4             return 1;
    5         }

      也可以使用 Parse 方法将参数转换为数值类型。 请看:

    1             //结果是一样的
    2             long num = Int64.Parse(args[0]);
    3 
    4             long num = long.Parse(args[0]); //Int64 的别名
    5 
    6             long num = Convert.ToInt64(args[0]);    //Convert 类

    方法的返回值

      它可以返回 void,也可以是 int。

     1     static void Main()
     2     {
     3         //...
     4     }
     5 
     6     //返回类型:int
     7     static int Main()
     8     {
     9         //...
    10         return 0;
    11     }

      如果不希望 Main 的拥有返回值,你可以使用返回 void 简化代码。 但是,如果返回整数,则该程序可以与调用该 .exe 文件的其他程序或脚本进行信息交互。

    与批处理交互的一个示例

      我打算使用一个批处理文件来执行程序,来测试 Main 函数的返回值。 在 Windows 中执行你的程序时,Main 函数会将返回的值存放到一个名字叫 ERRORLEVEL 的环境变量中。 通过 check 这个名字叫 ERRORLEVEL 的环境变量,批处理文件可以知道自己的执行结果。 通常,我们会以返回值为 0 来表示执行成功。

      下面是一个简单示例,从 Main 函数返回 0(0 表示程序运行成功)。 我将它命名为 MyMainTest.cs(修改了 Program.cs 的名字)。

    1     class MyMainTest
    2     {
    3         static int Main(string[] args)
    4         {
    5             //TODO: Other
    6             return 0;
    7         }
    8     }

      

      写好后定位到包含 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# 知识回顾 - 委托 delegate》、《C# 知识回顾 - 委托 delegate (续)

      《C# 知识回顾 - 事件入门》、《C# 知识回顾 - Event 事件

      《string 与 String,大 S 与小 S 之间没有什么不可言说的秘密

      《C# 知识回顾 - 你真的懂异常(Exception)吗?


    【博主】反骨仔

    【出处】http://www.cnblogs.com/liqingwen/p/6213624.html 

    【参考】微软官方文档  

  • 相关阅读:
    TT ERP 业务功能分析 汇总
    CSRedis 使用说明
    多线程,控制Task的20个并发数量,全部子线程执行完后,获取所有返回的值
    React 和 vue的区别以及React的环境搭建,运行
    jar 包上传后 Xshell启动
    FileZilla 上传文件
    vue多环境配置
    el-tree 节点常用操作
    钉钉微应用
    Bonobo Git Server
  • 原文地址:https://www.cnblogs.com/liqingwen/p/6213624.html
Copyright © 2011-2022 走看看