В вашем примере я бы пошел первым путем. Второй вариант на самом деле не устраняет дублирование кода, которого вы, по-видимому, пытаетесь избежать, поскольку вам все равно нужно явно указать _param
. Пустой вызов this ()
во втором подходе совершенно бесплатный.
Я предпочитаю первый. Таким образом, поведение конструкторов всегда будет согласованным и предсказуемым, а также уменьшится дублирование кода.
Цепочка из pramater less to pramater,
поэтому вызов из конструкторов параметров арендодателя со значениями по умолчанию к большему количеству параметров
public MyClass()
{
MyClass(default value here);
}
public Myclass(value)
{
_value = value;
}
Я бы подумал, что всегда лучше использовать цепочку от меньшего к большему, т.е. зачем назначать пустую строку, а не заданную строку в конструкторе, когда имеет смысл передать значение по умолчанию (строка. Пусто) параметризованному конструктору.
Я тоже предпочитаю первый. Так же, как в сложном производном классе, наследующем от простого базового класса, вы хотите, чтобы «сложный» конструктор основывался на функциональности «базового».
Второй пример в вашем случае действительно не имеет смысла, поскольку вы дублируете назначение члена класса (если вы используете конструктор MyClass (параметр строки)
).
Второй подход более полезен, если связанные конструкторы «добавляют функциональность».
Пример:
public MyClass ()
{
_param0 = string.Empty;
}
public MyClass (string param1) : this ()
{
_param1 = param1;
}
public MyClass (string param1, string param2) : this (param1)
{
_param2 = param2;
}
В вашем конкретном случае первый пример, очевидно, намного более уместен, поскольку у вас есть только одно назначение одному и тому же члену.
Если вы сформулировали здесь свою цель как «обеспечение значения по умолчанию, когда значение не указано», тогда вам следует явно использовать первый подход.
Общее правило будет таким: цепочка из наименьшего -специфический конструктор в наиболее точный.