2009-09-22 47 views
8

考虑下面的类:在C#中,构造函数链接的最佳/可接受的方式是什么?

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; 
} 

那么,从无参数构造函数或其他方式链接更好?

回答

13

用你的例子,我会走第一条路。第二个实际上并没有消除任何你想要避免的代码重复,因为你仍然必须明确地设置_param。第二种方法中的空的this()呼叫是完全无偿的。

+0

事实上,这似乎是这里的共识。 – 2009-09-22 18:23:11

4

我更喜欢第一个。构造函数的行为将始终如此一致且可预测,并且减少代码重复。从pramater少

3

链pramater,

所以从默认瓦尔斯出租人PARAM构造函数调用到多个参数

public MyClass() 
{ 
    MyClass(default value here); 
} 

public Myclass(value) 
{ 
    _value = value; 
} 
1

我会想象,它总是从较小的更大,即链更好为什么要在构造函数中分配一个空字符串然后给定的字符串,当将默认(string.Empty)传递给参数化的构造函数更有意义时。

0

如果你在这里陈述你的目标是“当没有指定值时提供默认值”,那么你应该清楚地使用第一种方法。

一般的规则是:从最不具体的构造函数链到最具体的。

1

我更喜欢第一个。就像在一个从简单基类继承的复杂派生类中一样,您希望“复杂”构造函数构建“基本”函数的功能。

1

由于您重复了类成员的分配(如果使用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; 
} 

你的具体情况,第一个例子显然是更合适的,因为你只有一次分配到相同的成员。

相关问题