使用场景
函数传参:在遇到 函数传入的参数个数 无法确定时,需要灵活控制传入参数个数时,使用在参数前加上params。
params 用于参数的数量可变的情况下,即参数的个数是未知数。
比较
定长参数:不灵活,如果有两个形参,只能传2个实参。
变长参数:灵活,有3个传3个,有10个传10个。
定长的做法:
List<int> l = new ArrayList<>();
l.add(1);
l.add(2);
l.add(3);
不定长的做法:
listOf(1,2,3);
使用params 需要知道以下4点:
主要看前两点(基本的&常用的)
1、作用的对象:params只能修饰一维数组
public int Sum(params int[] ps)
{
private int sum=0;//私有成员:sum
//遍历数组ps中的每个元素p:进行加和操作
foreach(int p in ps)
{
sum = sum + i;//可简写sum+=i;
}
return sum;//返回输出结果
}
2、位置:params永远放在最后一个位置
memo:若函数传递了多个参数,Params标记的参数数组必须放最后
public void func(int i,params int[] ps)//正确
public void func(params int[] ps,int i)//错误:params没放最后
3、组合:params不可与ref、out并存
4、限定:实参必须与形参同类型
memo:可以是一个数组,也可以是任意多个同类型变量。
int[] ar0 = new int[3]{1,2,3};
int[] ar1 = new int[3]{4,5,6};
public int mySum0 = Sum(ar0);//正确
public int mySum1 = Sum(ar1);//正确
public int mySum2 = Sum(1,3,5);//正确
public int mySum3 = Sum(ar0,ar1);//错误:只能传一个数组
public int mySum4 = Sum(1,3,"hello");//错误:hello不是int类型
具体实例:复制代码测试一下输出,实践是最好的学习!
class MyObj
{
//定义一个静态方法:求和
public int Sum(params int[] ps)
{
private int sum=0;//私有成员:sum
//遍历数组ps中的每个元素p:进行加和操作
foreach(int p in ps)
{
sum = sum + i;//可简写sum+=i;
}
return sum;//返回输出结果
}
//定义主函数:调用求和方法
static void Main(string[] args)
{
//可变参数:任意数量同类型参数
int mySum0 = Sum(1,2,3);
int mySum1 = Sum(4,5,6,7,8);
Console.WriteLine(mySum0);
Console.WriteLine(mySum1);
//实参可以是数组名
int[] ar0 = new int[3] {1,2,3};
int mySum2 = Sum(ar0);
Console.WriteLine(mySum2);
Console.Read();
}
}