Страницы

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

пятница, 2 ноября 2018 г.

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

Допустим есть класс 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");
и почему?
Ответы на этот вопрос смотрел, но не нашёл там ответа на свой.


Ответ

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

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

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