zoukankan      html  css  js  c++  java
  • C#:方法参数之--形参数组(params)

    形参数组:方法声明时,使用params(parameters的缩写)修饰符声明的形参,被称为形参数组。

    • 该形参数组必须位于方法参数列表的最后
    • params后面必须跟的是一个数组(不要使矩阵数组,如:string[,])
    • 不要把params和ref和out组合起来使用
    • 在调用形参数组所在的方法时,有两种调用方式:
      • 实参 可以是一个与形参数据类型一致的数组
      • 可以提供 零个或多个实参,方法调用时会自动根据传入的实参 创建一个形参类型的数组

    Console类的WriteLine()方法提供的一种重载方式,就是带有形参数组的。

    带有形参数组的Writeline方法
    下面展示如何调用这个WriteLine方法

    //WiteLine第二个参数是形参数组,所以我们传入一个string[]数组 来调用Writeline方法
    Console.WriteLine("我叫{0},我{1}岁了",new string[]{ "bigboss", "26"});//我叫bigboss,我26岁了
    

    以string的Split()方法为例,展示调用形参数组所在的方法时,可以传入多个实参。

    Split()方法是一个包含形参数组的方法

    string str = "a,b,c.1.2.4;99;er;ww";
    var _params = new char[] {'.',';',',' };
    //实参为一维数组
    var result_arr= str.Split(_params);
    //返回长度为9的数组 {"a","b","c","1","2","4","99","er","ww"}
    foreach (var item in result_arr)
    {
        Console.WriteLine(item);
    }
    //零个实参
    var result_arr_2 = str.Split();
    //无匹配结果 返回一个长度为1的数组 {"a,b,c.1.2.4;99;er;ww"}
    foreach (var item in result_arr_2)
    {
        Console.WriteLine(item);
    }
    //一个实参
    var result_arr_4 = str.Split('.');
    //匹配到字符'.';返回长度为4的数组{"a,b,c","1","2","4;99;er;ww"}
    foreach (var item in result_arr_4)
    {
        Console.WriteLine(item);
    }
    //多个实参
    var result_arr_3 = str.Split(',','.',';');
    //返回长度为9的数组 {"a","b","c","1","2","4","99","er","ww"}
    foreach (var item in result_arr_3)
    {
        Console.WriteLine(item);
    }
    

    可以看出,含有形参数组的方法调用是十分灵活的--传入实参灵活

    声明带形参数组的方法

    //错误的方法声明:params 参数必须是形参列表中最后一个参数
    static void ErrorMethod(params string[] lists, string name)
    {
        foreach (var item in lists)
        {
            Console.WriteLine(item);
        }
    }
    
    //错误的方法声明:params 参数必须是一维数组
    static void ErrorMethod2(params string[,] lists)
    {
        foreach (var item in lists)
        {
            Console.WriteLine(item);
        }
    }
    
    //正确的声明形式
    static void TrueMethod(string name, params string[] lists)
    {
        foreach (var item in lists)
        {
            Console.WriteLine(item);
        }
    }
    

    说明:因为在我们调用除带有形参数组外,还有其它形参的方法时,由于形参数组的独特性:可以传多个实参;所以如果形参数组声明在方法形参列表的前面(不是最后一个),方法调用时C#解析器不知道什么哪一个实参才是针对形参数组的结束位置;为了避免这种问题,在编译阶段就不允许形参数组不出现在方法最后的形式。
    以上是对形参数组的总结,形参数组我们大多数情况下是调用,而不自己声明;注意调用时方法的重载形式就好;记录下来,以便以后查阅。

  • 相关阅读:
    WPF / Win Form:多线程去修改或访问UI线程数据的方法( winform 跨线程访问UI控件 )
    TCP 流模式与UDP数据报模式(转)
    hibernate 检索方式
    【UVA】1449-Dominating Patterns(AC自己主动机)
    软件项目工作流程图
    iOS7 UIKit动力学-碰撞特性UICollisionBehavior 下
    东莞无人工厂变成现实,中国无人工厂将非常快普及,保住世界工厂地位
    小米手机与魅族的PK战结果 说明了什么
    python Debug 单步调试
    合并两个排序的单链表
  • 原文地址:https://www.cnblogs.com/bigbosscyb/p/13748592.html
Copyright © 2011-2022 走看看