Tengo dos métodos sobrecargados, uno con un parámetro opcional.Métodos en conflicto sobrecargados con los parámetros opcionales
void foo(string a) { }
void foo(string a, int b = 0) { }
ahora me llaman:
foo("abc");
curiosamente la primera se llama sobrecarga. ¿por qué no la segunda sobrecarga con valor opcional puesto a cero?
Para ser honesto, esperaba que el compilador generara un error, al menos una advertencia para evitar la ejecución no intencionada del método incorrecto.
¿Cuál es la razón de este comportamiento? ¿Por qué el equipo de C# lo definió de esa manera?
Este es exactamente el tipo de mal diseño del lenguaje que conduce a errores insidiosos. También podría ser fácilmente explotado por un interno para propósitos de espionaje corporativo. Desearía que bloquearan el lenguaje de permitir esto ya. –