#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 Использование именованных и необязательных аргументов следующим образом влияет на разрешение перегрузки: метод, индексатор или конструктор является кандидатом на выполнение, если каждый из его параметров является необязательным или соответствует по имени или позиции одному аргументу в инструкции вызова, а этот аргумент можно преобразовать к типу параметра; если обнаружено более одного кандидата, правила разрешения перегрузки для предпочтительных преобразований применяются к аргументам, которые заданы в явном виде. Опущенные аргументы для необязательных параметров игнорируются; если два кандидата оказываются одинаково подходящими, предпочтение отдается кандидату, у которого нет необязательных параметров, аргументы которых были опущены в вызове. Это последовательность общего приоритета при разрешении перегрузки для кандидатов с меньшим числом параметров. мне кажется в вашем случае применяется второе правило, и будет вызван первый конструктор.
Комментариев нет:
Отправить комментарий