在C#中,进行构造函数链接的最佳/公认方法是什么?
鉴于以下类别:在C#中,进行构造函数链接的最佳/公认方法是什么?,c#,constructor,chaining,C#,Constructor,Chaining,鉴于以下类别: public class MyClass { private string _param; public MyClass () { _param = string.Empty; } public MyClass (string param) { _param = param; } } 我在两种方式之间被撕裂,这两种方式将这些构建者联系起来: 第一个: public MyClass ()
public class MyClass
{
private string _param;
public MyClass ()
{
_param = string.Empty;
}
public MyClass (string param)
{
_param = param;
}
}
我在两种方式之间被撕裂,这两种方式将这些构建者联系起来:
第一个:
public MyClass () : this (string.Empty)
{
}
public MyClass (string param)
{
_param = param;
}
第二个:
public MyClass ()
{
_param = string.Empty;
}
public MyClass (string param) : this ()
{
_param = param;
}
那么,从无参数构造函数还是从另一个角度进行链接更好呢?对于您的示例,我会选择第一种方法。第二种方法实际上并没有消除您可能试图避免的任何代码重复,因为您仍然必须显式地设置
\u param
。第二种方法中的空this()
调用是完全没有意义的。我更喜欢第一种方法。构造函数的行为将始终是一致的和可预测的,而且它减少了代码重复。从pramater less链到pramater
因此,使用默认VAL从出租方参数构造函数调用更多参数
public MyClass()
{
MyClass(default value here);
}
public Myclass(value)
{
_value = value;
}
我认为最好是从小到大进行链接,也就是说,当将默认值(string.empty)传递给参数化构造函数更有意义时,为什么要在构造函数中分配一个空字符串,然后再分配一个给定字符串呢,那么你应该清楚地使用第一种方法
一般规则是:从最不特定的构造函数到最特定的构造函数进行链接。我也喜欢第一个。正如在从简单基类继承的复杂派生类中一样,您希望“复杂”构造函数建立在“基本”构造函数的功能上。在您的情况下,第二个示例实际上没有意义,因为您重复了类成员的赋值(如果您使用
MyClass(string param)
构造函数)
如果链式构造函数正在“添加功能”,则第二种方法更有用
例如:
public MyClass ()
{
_param0 = string.Empty;
}
public MyClass (string param1) : this ()
{
_param1 = param1;
}
public MyClass (string param1, string param2) : this (param1)
{
_param2 = param2;
}
在你的特殊情况下,第一个例子显然更合适,因为你只有一个任务分配给同一个成员。事实上,这似乎是这里的共识。