params:
以数组的方式传递多个参数,在params前可以定义非params的参数,但其后不能再定义参数。
如:
class Class2
{
Class1 class1;
int nNum, nCount;
//public Class2(int a ,params int[] pars, int b) //错误,不能再pars之后在定义参数,但可以再pars前定义参数,即a
public Class2(int a ,params int[] pars) // 正确
{
this.class1 = new Class1();
foreach (int i in pars)
{
nNum = i;
}
}
}
ref和out:
相同:都是引用传值,即参数在被传递到另一个方法中发生变化后保持这种变化。
区别:
1.ref的变量在使用前需初始化,而out的变量在使用前可定义即可(也可初始化)
2.在调用的方法里ref的变量可以不进行修改,而out的变量必须进行变更。
3.如果两个方法唯一的区别是:一个接受 ref 参数,另一个接受 out 参数,则无法重载这两个方法。
4.如果一个方法采用 ref 或 out 参数,而另一个方法不采用这两类参数,则可以进行重载。
如:
strig
string surname = "t", // srtname 在change方法中是ref的方式传值,必须初始化
fullname=" "; // fullname在change方法中是out的方式传值,可以初始化也可以只定义
this.change(ref surname, out fullname);
public void change(ref string refValue,out string ouValue)
{
refValue = "tong"; //srtname 在change方法中是ref的方式传值,可以对其变更,也可以不对其操作
ouValue = "zhengwei"; // fullname在change方法中是out的方式传值,在调用的方法中必须对其进行变更和修改
}
public void change(string refValue,out string ouValue) //因为该方法参数与上个change方法不一致,没有ref,所以可以重载
{
refValue = "tong";
ouValue = "zhengwei";
}
public void change(out string refValue,out string ouValue) 虽然该方法参数与第一个change方法不一致,即ref换成out,但是不可以重载,
{
refValue = "tong";
ouValue = "zhengwei";
}