Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

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

#c_sharp


Допустим есть класс Myclass, имеющий 3 конструктора - первый по умолчанию, без параметров,
и два таких:

public Myclass(string param1, string param2 = null)
{
    Text = param1;
    Data = param2;
}

public Myclass(string param1, string param3, string param2 = null)
{
    Text = param1;
    Url = param3;
    Data = param2;
}


Сигнатура разная (или нет?), но какой конструктор будет вызван в таком случае

new Myclass("param1", "param3");   


и почему?   

Ответы на этот вопрос смотрел, но не нашёл там ответа на свой.
    


Ответы

Ответ 1



MSDN Использование именованных и необязательных аргументов следующим образом влияет на разрешение перегрузки: метод, индексатор или конструктор является кандидатом на выполнение, если каждый из его параметров является необязательным или соответствует по имени или позиции одному аргументу в инструкции вызова, а этот аргумент можно преобразовать к типу параметра; если обнаружено более одного кандидата, правила разрешения перегрузки для предпочтительных преобразований применяются к аргументам, которые заданы в явном виде. Опущенные аргументы для необязательных параметров игнорируются; если два кандидата оказываются одинаково подходящими, предпочтение отдается кандидату, у которого нет необязательных параметров, аргументы которых были опущены в вызове. Это последовательность общего приоритета при разрешении перегрузки для кандидатов с меньшим числом параметров. мне кажется в вашем случае применяется второе правило, и будет вызван первый конструктор.

Комментариев нет:

Отправить комментарий