10

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

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

或者

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

任何投入将不胜感激

4

7 回答 7

17

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

您应该只在需要时“复制”代码,因为它需要不同,所以它不再是重复的。这样,重复是向读者传达的信息,即代码实际上是不同的,并且是有原因的。

于 2010-08-19T17:40:38.107 回答
7

两个独立的构造函数的问题在于,它们通常包含相同的代码,当一个构造函数被更改而另一个不被更改时,这可能会导致以后的重构出现问题。因此,您可以将带有 this() 的构造函数链接视为DRY 原则的应用。

于 2010-08-19T17:41:05.737 回答
2

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

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

干燥是一件好事:)

于 2010-08-19T17:41:27.467 回答
1

这就是链接构造函数的方式,这是一件非常有效的事情。

于 2010-08-19T17:39:09.830 回答
1

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

此外,我也总是尝试以我正在编写的代码的风格进行编码 - 所以如果主要风格是其中一种,我会采用这种风格以保持一致性。

于 2010-08-19T18:38:31.780 回答
0

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

链接构造函数比复制粘贴构造函数方法体要好得多。

于 2010-08-19T17:39:08.937 回答
0

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

这往往不太容易混淆,而且更灵活,尤其是在有许多构造函数的情况下。

于 2010-08-20T02:08:19.510 回答