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