Dziś odkryłem coś dziwnego. Zastanawiam się, dlaczego to działa:Przeciążenie metody C# z parametrami i opcjami
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";
}
Pomyśl o tym: Jaki jest wynik, gdy zadzwonisz ExampleMethod (3);
Moim zdaniem prowadzi to do nieprzewidywalnego wyniku. W moim przypadku zawsze nazywano metodę 1. Ale gdy zmieniłem podpis metody 1, główna metoda nazywa się metodą 2 (oczywiście).
Nie oczekiwałem takiego zachowania, oczekiwałem "wyjątku AmbiguousReferenceException" lub przynajmniej ostrzeżenia kompilatora.
Krótka odpowiedź: ponieważ specyfikacja mówi tak. http://www.microsoft.com/en-us/download/details.aspx?id=7029 –