創建與使用不定數目參數的函數
發表時間:2024-06-14 來源:明輝站整理相關軟件相關文章人氣:
[摘要]象C和C++這樣的語言提供了很多手段用于創建和使用一個接受不定數目參數的函數,最典型的例子就是printf()函數:int printf(char *format, …); //省略號表示參數數目不定 使用這個函數十分的簡單:printf("Hello, world\n");...
象C和C++這樣的語言提供了很多手段用于創建和使用一個接受不定數目參數的函數,最典型的例子就是printf()函數:
int printf(char *format, …); //省略號表示參數數目不定
使用這個函數十分的簡單:
printf("Hello, world\n");
printf("The sum of %d and %d is %d\n", a, b, a+b);
不過, 使用這些語言創建這樣的函數必須依賴于一系列預先定義的宏,而且往往并不具有直觀性和優雅性。
通過運用參數數組,C#提供了一種解決這個問題的優雅的解決方案。參數數組是一個一維數組,它作為方法的最后一個參數出現在參數列表中:
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;
}
上面的方法用于將一些字符串連接成一個字符串,這個方法可以以下面兩種不同的方式調用:
1) 使用數組實例作為參數傳遞給方法:
string[] names = { "Anders", "Eric", "Scott", "Duncan" };
MessageBox.Show(Concat("+", names) + " = great team");
2) 使用0個或多個類型相容的參數傳遞給方法:
MessageBox.Show(Concat("+", "Anders", "Eric", "Scott", "Duncan") + " = great team");
使用第二種方法調用方法時,會先使用這些類型相容的參數(上例中指的是第一個參數后面所有的參數)創建一個數組,然后把這個參數數組作為真正的實參傳遞給方法。從這一點可以看出:事實上,上面兩種方法傳遞實參的機制完全相同,只是表現手法不同而已。
得益于.NET統一的類型系統(所有類型都從object繼承,因此可以利用多態性原理實現類型的統一處理),定義方法時可以將object[]作為任何類型的代名稱定義為參數數組,調用方法時使用具體的類型調用:
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;
}