Перегрузка метода с дополнительным параметром

У меня есть класс следующим образом с двумя методами перегрузки.

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);