zoukankan      html  css  js  c++  java
  • C#默认参数,可变参数

            static void Main()
    {
    Console.WriteLine(test(1));//第一个参数是我们传递的,第二个参数使用默认的
    Console.WriteLine(test(2,"operators"));//两个参数都是我们自己定义的了
    Console.WriteLine(Params("qq"));//第二个参数传递的是 new int[0];
    Console.WriteLine(Params("qq", null));//与上面的是同样的效果,但是这样更高效,因为不会分配数组;
    Console.WriteLine(Params("qq",1,2,3,4));
    Console.WriteLine(Params("tt", 1, 2));//先检查所有具有指定名称,同时参数没有应用paramArry attribute的方法,如果找到匹配的方法,就生成对这个方法的调用。
    //如果没有找到,就会接着检查应用了ParamArry attribute的方法。
    Console.WriteLine(Params("nn", 1, 2, 4, 5, 6));//这个调用static string Params(string s,int i=1,params int[] obj)方法,先去匹配非可选参数的方法的参数。
    Console.ReadKey();
    }
    static string test(int i,string s = "default")//可选参数必须出现在所有必需参数后面
    {
    return s;
    }
    static string Params(string s,params int[] i)//可变量参数必须是形参列表中的最后一个参数
    {
    if (i != null)
    {
    for (int t=0; t < i.Length; t++)
    {
    s +=i[t].ToString();
    }
    }
    return s;
    }
    static string Params(string s,int i=1,params int[] obj)//但是,缺省参数后面可以跟数组参数(params参数),
    //实际上无论在什么情况下,params参数都只能是最后一个声明的参数。缺省参数的另一个限制是:指定的缺省值必须是一个常量。
    {
    foreach (object o in obj)
    {
    s += o.ToString();
    }
    return s;
    }
    static string Params(string s, int i, int t)
    {
    return s+i.ToString()+t.ToString();
    }

    }

    使用默认参数时,如果对参数用ref或者out关键字进行了标识,就不能设置默认值,因为没有办法为这些参数传递一个有意义的默认值。

    调用一个参数数量可变的方法时,会造成一些额外的性能上的损失(除非显式传递null),毕竟数组对象必须在堆上分配,数组元素必须初始化,而且数组的内存最终必须垃圾回收,为了降低性能损失,可以考虑定义几个没有使用params关键字的重载版本。
    编辑器加载中...

  • 相关阅读:
    Git版本控制+配置中心(Spring Cloud Config)(八)
    NodeJS+Sidecar异构系统+Zuul(七)
    API网关Zuul(六)
    Hystrix断路器(五)
    Feign配合Ribbon和Eureka来提供负载均衡的HTTP客户端(四)
    负载均衡Ribbon(三)
    Eureka注册中心(二)
    SpringCloud介绍(一)
    Swift基础小结_2
    谓词(搜索)
  • 原文地址:https://www.cnblogs.com/smailxiaobai/p/2279373.html
Copyright © 2011-2022 走看看