:this()作为构造函数

时间:2010-08-19 17:37:08

标签: c# constructor overloading constructor-chaining

我试图更好地理解一般实践......特别是在构造函数中派生this()。我知道它的代码较少,但我认为它的可读性较差。这样做是常见/好的做法吗?或者编写第二个专门处理它的构造函数是否更好?

public SomeOtherStuff(string rabble) : this(rabble, "bloop") { }

Public SomeOtherStuff(string rabble)
{
    //set bloop
}

非常感谢任何输入

7 个答案:

答案 0 :(得分:17)

最好尽可能使用this()。否则你将复制一些违反DRY(不要重复自己)原则的代码。重复自己的问题是每次需要进行更改时 - 即使只是对单行代码进行简单更改 - 您必须记住以使相同在多个地方进行更改,并保持多个副本同步。

您应该只在需要时“复制”代码,因为它需要不同,因此它不再是重复的。这样,有一个副本就是向读者发出一条信息,即代码实际上是不同的,并且是有原因的。

答案 1 :(得分:7)

两个独立构造函数的问题在于它们通常包含相同的代码,当一个构造函数被更改而另一个构造函数没有更改时,这可能导致后续重构的问题。所以你可以看到构造函数链接this()作为DRY principle的应用程序。

答案 2 :(得分:2)

初始化列表是业界非常普遍的做法。

至于可读性......这是一个意见问题。但可维护性通常是一个更高的目标。

DRY是一件好事:)

答案 3 :(得分:1)

这就是你如何链接构造函数,这是一个非常有效的事情。

答案 4 :(得分:1)

我真的很喜欢第一种方式(构造函数链接)但是如果你觉得第二种方式更具可读性,那么你可以将构造函数中的任何重复代码放入私有方法中以避免破坏DRY原则已经提到了。

另外,我也总是尝试使用我正在处理的代码的样式进行编码 - 所以如果主要的样式是一个或另一个,我会采用这种风格来保持一致性。

答案 5 :(得分:0)

我不太关心可读性,更关心可靠性。

链接构造函数比复制构造函数方法体更好。

答案 6 :(得分:0)

DRY的另一种方法是编写初始化方法,例如Init(rabble, bloop),所有构造函数都调用此方法。

这往往不那么令人困惑和灵活,特别是在有许多构造函数的情况下。