zoukankan      html  css  js  c++  java
  • Params应用

    有时候我们要想传递可变数量的参数改怎么办??Params给我们提供了一个很好的方法

    Parmas:

    1.只运用方法的最后一位参数

    2.这个参数只能标志任意类型的一位数组

    3.添加了params这个参数的方法,该方法会添加ParamArray attribute.

    下面举例说明:

      static void Main(string[] args)
            {
                Console.WriteLine(GetData(new Int32[]{1,2,3,4}));
                Console.WriteLine(GetData(1,2,3,3));
                Console.ReadKey();
            }
     
            public static  string GetData(params Int32[] intArray)
            {
               
                string result = "";
                for (int i = 0; i < intArray.Count(); i++)
                {
                    result += i;
                }
                return result;
            }

    结果:1234 ,1233.
    Console.WriteLine(GetData(new Int32[]{1,2,3,4}));
      Console.WriteLine(GetData(1,2,3,3));
    这两个使用方法时等价的。
    当我们调用GetData这个方法时,CLR会查看所有Getdata()方法,发现没有具有4个参数的方法,就在查看具有ParamArray属性的Getdata方法,发现有,就调用它。就是这样!!!!

    我们还可以传递不同参数类型的多个参数
     static void Main(string[] args)
            {
                //Console.WriteLine(GetData(new Int32[]{1,2,3,4}));
                //Console.WriteLine(GetData(1,2,3,3));
                GetType("nime",new Int32[]{234,342,},324);
                Console.ReadKey();
            }
     
            public static void GetType(params object[] obj)
            { 
                foreach(object o in obj)
                {
                    Console.WriteLine(o.GetType());
                }
            
            }
    结果:
    System.String
    System.Int32[]
    System.Int32


    最后还有一点注意的,静态方法只能调用静态方法。就像上面一个,如果我把getdata方法的static除掉,就会提示 “非静态的方法或参数getdata()要求静态引用”
    why??
    理由很简单,静态方法可以直接用类名调用,是因为他直接在栈中,可直接拿来用。此时他所包含的参数也好,引用的方法也好都是未初始化的,就是说未给分配内存的,没给内存怎么调用
    所以对于静态的方法,所调用的方法也必须是已经非配内存的静态方法!

    总结:
    params中的参数只能是这个参数只能标志任意类型的一维数组。
    在调用的时候,为了避免重复的装箱拆箱操作,我们可以这样做:
    public static string Concat(object o1){}
    public static string Concat(object o1,object o2){}
    public static string Concat(object o1,object o2,object o3){}
    public static string Concat(params object[] args ){} (这是一个数组)
    我们可以讲object改为我们需要的类型,以防止不必要的装箱和拆箱!!
    
    
    
  • 相关阅读:
    [洛谷][P1503][鬼子进村][Treap]
    [noi 2004] 郁闷的出纳员
    bzoj 3224,tyvj 1728普通平衡树
    Treap
    [模拟赛]棘手的操作
    bzoj 4551[Tjoi2016&Heoi2016]树
    bzoj2527 [Poi2011]Meteors
    bzoj4152 [AMPPZ2014]The Captain
    bzoj4516 [Sdoi2016]生成魔咒
    bzoj4547 小奇的集合
  • 原文地址:https://www.cnblogs.com/fjsnail/p/3252903.html
Copyright © 2011-2022 走看看