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";
}