今日、私は何か変わったことを発見しました。この作品、なぜ私が疑問に思う:paramsとoptionalsを使ったC#メソッドのオーバーロード
static void Main(string[] args)
{
Console.WriteLine(ExampleMethod(3));
Console.ReadKey();
}
public static string ExampleMethod(int required, params int[] optionalint)
{
return "ExampleMethod 2";
}
public static string ExampleMethod(int required, string optionalstr = "default string", int optionalint = 10)
{
return "ExampleMethod 1";
}
はそれについて考える:あなたは(3)ExampleMethodを呼び出し、結果はどのようなものです。
私の意見では、予測不可能な結果につながります。私の場合、常に方法1が呼び出されました。しかし、メソッド1のシグネチャを変更すると、メインメソッドはメソッド2を呼びました(もちろん)。
私はこのような動作が期待できませんでした。私は "AmbiguousReferenceException"または少なくともコンパイラの警告を期待していました。
短い答え:スペックがそう言っているからです。 http://www.microsoft.com/en-us/download/details.aspx?id=7029 –