Он скомпилируется без предупреждений и выберет первую перегрузку.
С введением необязательных и именованных параметров механизм разрешения перегрузки в C # стал действительно сложным. Однако в данном конкретном случае это имеет смысл. Как обычно, компилятор выберет наиболее специфическую перегрузку, соответствующую аргументам.
Я не верю, что этот конкретный случай сильно отличается от C # 1.0:
public void SomeMethod(Int32 x, Int32 y) { }
public void SomeMethod(Int32 x, Int32 y, params Int32[] z) { }
, который работает идентично (с точки зрения разрешения перегрузки).
Последующий ответ: Я так не думаю. Боюсь, вам придется вручную указать аргумент по умолчанию в вызове метода. Однако, если параметр x
или y
имел другое имя, например:
public void SomeMethod(Int32 x, Int32 y) { }
public void SomeMethod(Int32 t, Int32 y, Int32 z = 0) { }
Вы можете выбрать вторую перегрузку с помощью:
obj.SomeMethod(t: 10, y: 20);