明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

創(chuàng)建與使用不定數(shù)目參數(shù)的函數(shù)

[摘要]象C和C++這樣的語言提供了很多手段用于創(chuàng)建和使用一個(gè)接受不定數(shù)目參數(shù)的函數(shù),最典型的例子就是printf()函數(shù):int printf(char *format, …); //省略號(hào)表示參數(shù)數(shù)目不定 使用這個(gè)函數(shù)十分的簡(jiǎn)單:printf("Hello, world\n");...
象C和C++這樣的語言提供了很多手段用于創(chuàng)建和使用一個(gè)接受不定數(shù)目參數(shù)的函數(shù),最典型的例子就是printf()函數(shù):

int printf(char *format, …); //省略號(hào)表示參數(shù)數(shù)目不定


使用這個(gè)函數(shù)十分的簡(jiǎn)單:

printf("Hello, world\n");

printf("The sum of %d and %d is %d\n", a, b, a+b);


不過, 使用這些語言創(chuàng)建這樣的函數(shù)必須依賴于一系列預(yù)先定義的宏,而且往往并不具有直觀性和優(yōu)雅性。

通過運(yùn)用參數(shù)數(shù)組,C#提供了一種解決這個(gè)問題的優(yōu)雅的解決方案。參數(shù)數(shù)組是一個(gè)一維數(shù)組,它作為方法的最后一個(gè)參數(shù)出現(xiàn)在參數(shù)列表中:

public string Concat(string separator, params string[] strings)

{

string result = "";

for (int i = 0; i < strings.Length; i++)

{

if (i > 0)

result += separator;

result += strings[i];

}

return result;

}


上面的方法用于將一些字符串連接成一個(gè)字符串,這個(gè)方法可以以下面兩種不同的方式調(diào)用:

1) 使用數(shù)組實(shí)例作為參數(shù)傳遞給方法:

string[] names = { "Anders", "Eric", "Scott", "Duncan" };

MessageBox.Show(Concat("+", names) + " = great team");


2) 使用0個(gè)或多個(gè)類型相容的參數(shù)傳遞給方法:

MessageBox.Show(Concat("+", "Anders", "Eric", "Scott", "Duncan") + " = great team");


使用第二種方法調(diào)用方法時(shí),會(huì)先使用這些類型相容的參數(shù)(上例中指的是第一個(gè)參數(shù)后面所有的參數(shù))創(chuàng)建一個(gè)數(shù)組,然后把這個(gè)參數(shù)數(shù)組作為真正的實(shí)參傳遞給方法。從這一點(diǎn)可以看出:事實(shí)上,上面兩種方法傳遞實(shí)參的機(jī)制完全相同,只是表現(xiàn)手法不同而已。

得益于.NET統(tǒng)一的類型系統(tǒng)(所有類型都從object繼承,因此可以利用多態(tài)性原理實(shí)現(xiàn)類型的統(tǒng)一處理),定義方法時(shí)可以將object[]作為任何類型的代名稱定義為參數(shù)數(shù)組,調(diào)用方法時(shí)使用具體的類型調(diào)用:

public int SumTheIntegers(params object[] list)

{

// sum all the integers included in list

int sum = 0;

foreach (object o in list)

if (o.GetType() == typeof(int))

sum += (int) o;

return sum;

}