C#中params关键字的作用

params表示参数是可变个数的

在不加params修饰时,只能往里传入一个数组。

在加了params后,不仅可以传入数组,还可以传入多个参数,这多个参数等价为数组。


在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。

C++中允许函数带有默认参数,允许不定数目的参数。但C#中不允许函数参数带有默认值。默认值这种功能,只能用函数重载来代替实现了。

但是C#允许方法带有不定数量的参数。使用params关键字,且参数必须是参数表中的最后一个参数。

要点:

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

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

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

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

扫描二维码关注公众号,回复: 3418435 查看本文章

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

6.可以不传入任何参数

System.Object(object)是所有类的根,使用params object数组来声明一个方法,它能接受任意数量的object参数;换言之,不仅参数的数量是任意的,参数的类型也可以是任意的。所以,此方法称为Black.Hole(黑洞)
1. 可以不向它传递任何参数
2. 可以在调用它时,传递null作为参数
3. 可以向它传递一个实际的数组。也就是说,可以人工创建本由编译器来创建的数组
4. 可以向它传递不同类型的其他任何参数,这些参数将自动封装到一个object数组

using System;
class Program
{
    static void Main()
    {
        fun("Call 1");
        Console.WriteLine("\n");
        fun("Call 2", 2);
        Console.WriteLine("\n");
        fun("Call 3", 3.2, "hey look at here", false);
 
        Console.ReadLine();
    }
    static void fun(string str, params object[] args)
    {
        Console.WriteLine(str);
        foreach (object ob in args)
        {
            if (ob is int)
            {
                Console.Write(" int : " + ob);
            }
            else if (ob is double)
            {
                Console.Write(" double : " + ob);
            }
            else if (ob is string)
            { 
                Console.Write(" string : " + ob);
            }
            else
            { 
                Console.Write(" other type : " + ob);
            }
        }
    }
}
using System;
public class MyClass 
{
 
    public static void UseParams(params int[] list) 
    {
        for (int i = 0 ; i < list.Length; i++)
        {
            Console.WriteLine(list[i]);
        }
        Console.WriteLine();
    }
 
    public static void UseParams2(params object[] list) 
    {
        for (int i = 0 ; i < list.Length; i++)
        {
            Console.WriteLine(list[i]);
        }
        Console.WriteLine();
    }
 
    static void Main() 
    {
        UseParams(1, 2, 3);
        UseParams2(1, 'a', "test"); 
 
        // An array of objects can also be passed, as long as
        // the array type matches the method being called.
        int[] myarray = new int[3] {10,11,12};
        UseParams(myarray);
    }
}

猜你喜欢

转载自blog.csdn.net/lizhenxiqnmlgb/article/details/82789903