Сегодня я обнаружил что-то странное. Интересно, почему это работает:Перегрузка метода 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";
}
Подумайте об этом: Что такое результат при вызове ExampleMethod (3);
По моему мнению, это приводит к непредсказуемому результату. В моем случае всегда был вызван метод 1. Но по мере того как я изменил подпись метода 1, основной метод называется методом 2 (конечно).
Я не ожидал такого поведения, я ожидал «AmbiguousReferenceException» или, по крайней мере, предупреждение компилятора.
Короткий ответ: потому что спецификация говорит так. http://www.microsoft.com/en-us/download/details.aspx?id=7029 –