Почему C # допускает перегрузку следующего метода:
void F(int a) { Console.WriteLine(1); }
void F(int? a) { Console.WriteLine(2); }
Если я запускаю этот код:
A a = new A();
a.F(1);
печатает 1
. Как компилятор знает, какой из них вызывать. Разве это не двусмысленно?
Я думал, что идея обнуляемых типов в том, что вы можете передать значение правильного типа или вы можете передать null
. Так что я должен быть в состоянии вызвать первый F
с (1)
, а второй F
с (1)
или (null)
.
У меня есть работающий пример здесь .
Обновление:
После прочтения ответа мое замешательство возникло из-за того, что я думал, что обнуляемые параметры - это синоним необязательных параметров.
Действительно, замена второго метода на void F(int a = 0);
приводит к ошибке компиляции.