除非必要,否則不會擴充套件引數
以下程式:
class Program
{
static void Method(params Object[] objects)
{
System.Console.WriteLine(objects.Length);
}
static void Method(Object a, Object b)
{
System.Console.WriteLine("two");
}
static void Main(string[] args)
{
object[] objectArray = new object[5];
Method(objectArray);
Method(objectArray, objectArray);
Method(objectArray, objectArray, objectArray);
}
}
將列印:
5
two
3
呼叫表示式 Method(objectArray)
可以用兩種方式解釋:一個 Object
引數恰好是一個陣列(因此程式會輸出 1
,因為這將是引數的數量,或者作為引數陣列,以正常形式給出,好像方法 Method
沒有關鍵字 params
。在這些情況下,正常的非擴充套件形式總是優先。所以,程式輸出 5
。
在第二個表示式 Method(objectArray, objectArray)
中,第一種方法的擴充套件形式和傳統的第二種方法都適用。在這種情況下,非擴充套件形式也優先,因此程式列印 two
。
在第三個表示式 Method(objectArray, objectArray, objectArray)
中,唯一的選擇是使用第一種方法的擴充套件形式,因此程式列印 3
。