第一次使用params这个关键字,发觉这是蛮好用的一种参数形式。
1、params
params关键字用在指定参数可变的场合中。在方法声明中加了params关键字后不能再同时定义其他参数,在声明方法中只允许params这个关键字的存在。
示例代码:
class Test
{
public void TestIntParams(params int[] vals)
{
if(vals != null && vals.Length > 0)
{
for(int i=0; i<vals.Length; ++i)
{
// Do something
}
}
}
static void Main()
{
int a=1, b=2, c=3;
int[] array = new int[] { 4, 5, 6 };
// Invoke methods using three ways
TestIntParams(a, b);
TestIntParams(a, b, c);
TestIntParams(array);
}
}
2、ref
ref 关键字使参数按引用传参,运行的结果就是在被调用的方法中对该变量的修改效果将会持续到返回调用方法之后。
(1)若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
(2)传递到 ref 参数的参数必须最先初始化。这与 out 不同,out 的参数在传递之前不需要显式初始化。
(3)属性不是变量,因此不能作为 ref 参数传递。
(4)尽管 ref 和 out 在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。
(5)如果一个方法采用 ref 或 out 参数,而另一个方法不采用这两类参数,则可以进行重载。
3、out
out关键字与ref相似,采用按引用传参。
(1)ref 要求变量必须在传递之前进行初始化。
(2)尽管作为 out 参数传递的变量不需要在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值(同时在被调用方法体中,必须在使用该参数之前赋初始值)。