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改为我们需要的类型,以防止不必要的装箱和拆箱!!
    
    
    
  • 相关阅读:
    Algs4-1.3.44文本编辑器的缓冲区
    Algs4-1.3.42复制栈
    Algs4-1.3.41复制队列采用for方式实现
    Algs4-1.3.39环形缓冲区
    Algs4-1.3.40前移编码
    Algs4-1.3.38删除第k个元素-数组实现
    安全测试的一些漏洞和测试方法
    Java内存自动回收,为什么会有内存泄露?
    三款主流静态源代码安全检测工具比较
    Fortify源码安全检测工具
  • 原文地址:https://www.cnblogs.com/fjsnail/p/3252903.html
Copyright © 2011-2022 走看看