【发布时间】:2013-06-30 20:31:00
【问题描述】:
今天我发现了一些奇怪的东西。我想知道为什么会这样:
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";
}
想一想:调用ExampleMethod(3)的结果是什么;
在我看来,这会导致不可预知的结果。在我的情况下,总是调用方法 1。但是当我更改方法 1 的签名时,主方法称为方法 2(当然)。
我没想到会出现这种行为,我预计会出现“AmbiguousReferenceException”或至少是编译器警告。
【问题讨论】:
-
简短回答:因为规范是这样说的。 microsoft.com/en-us/download/details.aspx?id=7029