• 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);
       }
    }
  • 相关阅读:
    Luogu P4727-- 【HNOI2009】图的同构记数
    UOJ #390. 【UNR #3】百鸽笼
    Loj #2541「PKUWC2018」猎人杀
    BZOJ 1444:[JSOI2009]有趣的游戏
    CF895C: Square Subsets && 【BZOJ2844】albus就是要第一个出场
    [NOI2011]阿狸的打字机
    不要再搜啦,满足你的需要,封装保留小数点后两位
    react 中刷新,路由传参数丢失不存在了?
    字符串根据某个符号查找并截取
    react-swiper 如何实现滑动小卡片的移动?
  • 原文地址:https://www.cnblogs.com/GreenLeaves/p/6086438.html
Copyright © 2020-2023  润新知