Перегрузка метода с дополнительным параметром
У меня есть класс следующим образом с двумя методами перегрузки.
Class A
{
public string x(string a, string b)
{
return "hello" + a + b;
}
public string x(string a, string b, string c = "bye")
{
return c + a + b;
}
}
Если я вызову метод x
из другого класса с двумя параметрами, то какой метод будет выполняться и почему? то есть,
string result = new A().x("Fname", "Lname");
Я протестировал это в своем консольном приложении и выполнил метод с двумя параметрами. Может кто-нибудь объяснить это?
Ответы
Ответ 1
Использование именованных и необязательных аргументов влияет на разрешение перегрузки:
Если два кандидата считаются одинаково хорошими, предпочтение отдается кандидата, у которого нет необязательных параметров, для которых аргументы были пропущены в вызове. Это является следствием общего предпочтение в разрешении перегрузки для кандидатов, у которых меньше Параметры.
Ссылка: MSDN
Предположим, что вызывается вышеупомянутый метод правил с 2 параметрами string x(string a,string b)
.
Примечание. Если оба перегруженных метода имеют необязательные параметры, то компилятор выдаст ошибку неоднозначности времени компиляции.
Ответ 2
Если вы вызываете метод с двумя параметрами, он использует метод с двумя параметрами. Если вы назовете один с тремя, он будет использовать другой.
Ответ 3
Он всегда будет выполнять метод, который сначала совпадает с точным отсутствием параметров, в вашем случае он выполнит:
Необязательный приоритет метода метода меньше, чем функция с точным отсутствием параметров
public string x(string a, string b);