C# params关键字的使用

    xiaoxiao2021-03-25  99

    params表示参数是可变个数的,示例如下。

    在不加params修饰时,只能往里传入一个数组。调用方式1

    在加了params后,不仅可以传入数组,还可以传入多个参数,这多个参数等价为数组。如调用方式2

     static void Main(string[] args)         {             int[] array = new int[] { 4, 2, 3, 4, 5, 5 };             int min = Util.Min(array);//调用方式1             Console.WriteLine(min);              min = Util.Min(6, 3, 4, 5);//调用方式2             Console.WriteLine(min);         }

     class Util     {         public static int Min(params int []par)         {             if (par == null || par.Length == 0)             {                 throw new ArgumentException("Util.Min:Not enough arguments");             }             int min = par[0];             foreach (int i in par)             {                 if (i < min)                     min = i;             }             return min                     }     }

    注意事项:

    要点1:

    1params不能用在多维数组上,这个大家可以试试,肯定会报错的。错误提示参数数组必须为一维数组

    2.不能使用params来重载方法

    public static int Min(params int []par)

    public static int Min(int []par)

    这种方式是不对的,因为重载是通过参数个数不同或者相同位置参数类型不同来区分的,这两种函数,函数的参数个数和参数类型都相同,所以不能区分。

    3.不允许ref和out  与 params同时使用,加上之后程序编译时报错。因为数组的传递的本来就是引用(只限于用数组的方式进行调用),用上面调用方式2则无法对实参进行更改。用调用方式1时,在函数内部对参数数组的值进行了更改,则作为实参的数组的值也被更改。

    要点2:

    1.params数组必须是最后一个参数。

    public static int Min( int a, params int []par)

    2.一个没有params的方法的优先级高于带有params的方法

     public static int Min(int a,int b);//函数1

     public static int Min(params int []par);//函数2

     int min = Util.Min(9,2);//函数1优先级高,调用函数1,如果给a和b初始化值,则

    int min = Util.Min(1, 2, 3);//函数要放两个参数,所以调用函数2

    int min = Util.Min(1 );//函数要放两个参数,所以调用函数2

    如果将函数1的参数进行了初始化,则

    int min = Util.Min(1 );//函数1最多放2个参数,所以优先调用函数1

    书上还有一条,是对于引起歧义的方法,重载编译器报错,就像下面两个一样,说优先级是一样的,所以编译器无法判断调用什么。

     public static int Min(int a, params int[] par);//函数1

       public static int Min(params int []par);//函数2

    但是我在运行之后发现

     int min = Util.Min(array);//这种情况调用函数2

       int min = Util.Min();//参数为空调用函数2

      int min = Util.Min(2,array);//调用函数1

     int min = Util.Min(2);//调用函数1,只有一个参数,应该是,2为int,把空给那个params数组。就像参数为空时可以调用函数2 那样

    int min = Util.Min(2,3);//多个参数,也是调用函数1

    使用params数组:

      public static void Min(params object[] par);

                 int[] array = new int[] { 4, 2, 3, 4, 5, 5 };             int a = 8;             object[] o = new object[] { "abc", 4.5 };             Util.Fun(a,"agga",425,5.67,array,o);//可以传递任意类型的参数,此时数组o传递到函数内,被一个引用指向o,输出的是这个对象的名字             Util.Fun(o);//可以传递object数组,此时o在函数内被引用数组指向,输出的是内容            Util.Fun();//可以什么都不传递,此时什么都没有,什么都不输出            Util.Fun(null);//也可以传递空值

    转载请注明原文地址: https://ju.6miu.com/read-26182.html

    最新回复(0)