過載,是指在相同的作用域內,宣告多個同名的方法。用以對不同型別或數量的引數的引數執行相同的操作。比如,可以求兩個或者三個 int型別數中的最大值,我們可以編寫這樣的方法實現:
classutil
public
static
int max(int num1,int num2,int
num3)
}
顯然,當引數數目不確定的時候,過載不是乙個好的解決辦法,這時候,可以使用陣列作為引數傳入。以上面的問題為例:
classutil
int currentmax=paramlist[0
];
foreach(int i in
paramlist)
}return
currentmax;
}}
為了使用max方法判斷2個int值得最小值,可以像下面這麼寫:
int array=newint[2
];array[
0]=first;
array[
1]=second;
int max=util.max(array);
為了使用max方法判斷2個int值得最小值,可以像下面這麼寫:
int array=newint[3
];array[
0]=first;
array[
1]=second;
array[
2]=third;
int max=util.max(array);
雖然上面的辦法避免了大量的過載,但是額外多了很多**來填充陣列,但是如果用 params 關鍵字來宣告乙個params陣列,一切就ok了,還是用上面的例子,用法如下:
classutil
int currentmax=paramlist[0
];
foreach(int i in
paramlist)
}return
currentmax;
}}
這時候如果要求四個int型別的數中的最大值,方法為: util.max(first,second,third,fourth);
編譯器會自動完成填充陣列的過程,再將陣列的作為引數傳遞進去。
那麼,對於型別不同的引數,同樣可以使用 params object
關於params陣列,要注意一下幾點:
1、只能為一位陣列使用 params 關鍵字,不能為多為陣列使用,否則編譯不能通過。
2、不能只依賴 params 關鍵字來過載乙個方法。 params 關鍵字不構成方法簽名的一部分,例如:
//編譯時錯誤:重複的宣告
public
static
int max(int
paramlist)
...public
static
int max(params
int paramlist)
...
3、不允許為 params 陣列指定 ref 或 out修飾符。
4、params 陣列必須是方法的最後乙個引數,沒個方法中也只能有乙個 params 陣列引數。
//編譯時錯誤
public
static
int max(params
int paramlist,int
i)...
5、非params方法優先
publicstatic
int max(int first,int
second)
...public
static
int max(params
int paramlist)
...
對於上面的過載方法,傳入兩個 int 引數時,呼叫上面的方法,傳入其它任意數量的 int 引數時,呼叫下面的方法。這樣做並非多餘,實則起到優化作用。
6、有歧義的過載編譯不能通過。
//編譯時錯誤
public
static
int max(params
int paramlist)
...public
static
int max(int i, params
int paramlist)
...
如上,程式無法分辨呼叫哪乙個方法。
C 引數陣列
引數陣列,通過關鍵字params定義引數陣列,paras型別引數主要用於在對陣列長度未知 可變 的情況下進行函式宣告,呼叫時可以傳入個數不同的實參,具備很好的靈活性。首先給出乙個具體的例子介紹引數陣列 params 的具體用法,首先定義乙個帶有引數陣列的方法 using system public ...
c 引數陣列
有時,當宣告乙個方法時,不能確定要傳遞給函式作為引數的引數數目,c 引數陣列解決了這個問題,引數陣列通常用於傳遞未知數量的引數給函式 params關鍵字 在使用陣列作為形參時,c 提供了params關鍵字,使呼叫陣列為形參的方法時,既可以傳遞陣列實參,也可以只傳遞一組陣列,params使用格式為 p...
C 引數陣列與陣列引數
1 陣列作為引數來傳遞時,當呼叫這個函式時裡面的引數需要new乙個陣列 2 引數陣列就是在函式的陣列引數前面加上params,當呼叫函式傳遞陣列時不需要再new乙個,只需要傳遞任意個跟陣列引數型別相同的數就可以 using system namespace 1 引數陣列 return sum sta...