[英]C# and variable number of parameters
我嘗試了以下代碼:
class Program: ProgParent
{
public int Max(params int[] op)
{
return 0;
}
public int Max(int i, params int[] op)
{
return 1;
}
public int Max(int i, int j, params int[] op)
{
return 2;
}
public static void Main(string[] args)
{
System.Console.WriteLine((new Program()).Max(5, 6, 7, 8));
System.Console.ReadKey();
}
}
它執行並使用可用的最具體的 function。 但是編譯器對此沒有給出警告或錯誤。 為什么?
C# 語言規范說:
在執行重載決議時,帶有參數數組的方法可以以它的正常形式[即傳遞一個數組]或它的擴展形式[即傳遞可變數量的參數]適用。 方法的擴展形式僅在方法的正常形式不可用並且僅當與擴展形式具有相同簽名的方法尚未在相同類型中聲明時才可用"
簡而言之(稍微簡化):如果重載決議不明確,編譯器會選擇非參數重載。
我猜這個決定的原因(而不是讓像你這樣的代碼非法)包括:
忽略構建錯誤(我將其歸結為拼寫錯誤)-您期望或想要什么警告? 它正在尋找匹配的重載並使用它......
嚴格來說,我可以調用不同的重載——通過傳遞 arrays,但是是的,用法並不完全清楚。
如果沒有params
的多個重載,這種模式在string.Concat
等(它支持+
用於引擎蓋下的字符串)中被大量使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.