out 關鍵字
out 關鍵字的作用與 ref 關鍵字非常相似,並且對使用 out 關鍵字聲明的參數所做的修改在方法外是可見的。它與 ref 有兩點不同:首先,out 參數的任何初始值在方法中都是忽略的;其次,out 參數必須在方法中賦值:
using System;
public class OutClass
{
public static void Main(string[] args)
{
int total = 20;
Console.WriteLine("Original value of 'total': {0}", total);
Add (33, 77, out total);
Console.WriteLine("Value after Add() call: {0}", total);
}
public static void Add (int i, int j, out int result)
{
// The following line would cause a compile error
// Console.WriteLine("Initial value inside method: {0}", result);
result = i + j;
}
}
在該示例中,Add() 方法的第三個參數是用 out 關鍵字聲明的,並且對該方法的調用還需要將 out 關鍵字用於該參數。輸出結果為:
Original value of 'total': 20Value after Add() call: 110
因此,總的來說,當您希望方法修改現有的變量時,可以使用 ref 關鍵字,而使用 out 關鍵字來返回在該方法中產生的值。當方法為調用代碼產生多個結果值時,通常一起使用 out 關鍵字與該方法的返回值。
使用不確定數目的參數
通過在聲明方法時指定 params 關鍵字,C# 允許我們發送可變數目的參數。參數列表也可以包含普通參數,但是需要注意,用 params 關鍵字聲明的參數必須放在最後。它采用可變長度數組的形式,並且每個方法只有一個 params 參數。
當編譯器嘗試解析一個方法調用時,它查找其參數列表與調用的方法相匹配的方法。如果找不到可以與參數列表匹配的方法重載,但是存在與適當類型的 params 參數匹配的版本,則會調用該方法,並將額外的參數放在一個數組中。
下面的示例對此進行了演示:
using System;
public class ParamsClass
{
public static void Main(string[] args)
{
Average ("List One", 5,10,15);
Average ("List Two", 5,10,15,20,25,30);
}
public static void Average (string title, params int[] values)
{
int Sum = 0;
Console.Write("Average of {0}: ", title);
for (int i = 0; i < values.Length; i++)
{
Sum += values[i];
Console.Write(values[i] + ", ");
}
Console.WriteLine(": {0}", (float)Sum/values.Length);
}
}
在上面的示例中,用整型數組中的 params 參數聲明了方法 Average,讓我們使用任何數目的參數來調用它。輸出結果如下:
Average of List One: 5, 10, 15, : 10
Average of List Two: 5, 10, 15, 20, 25, 30, : 17.5
注意,如果我們希望允許不同類型的不確定參數,我們可以指定 Object 類型的 params 參數。