我试图更好地理解一般实践......特别是在构造函数中派生 this() 。我知道它的代码较少,但我认为它的可读性较差。这样做是常见的/好的做法吗?还是编写第二个专门处理它的构造函数更好?
public SomeOtherStuff(string rabble) : this(rabble, "bloop") { }
或者
Public SomeOtherStuff(string rabble)
{
//set bloop
}
任何投入将不胜感激
我试图更好地理解一般实践......特别是在构造函数中派生 this() 。我知道它的代码较少,但我认为它的可读性较差。这样做是常见的/好的做法吗?还是编写第二个专门处理它的构造函数更好?
public SomeOtherStuff(string rabble) : this(rabble, "bloop") { }
或者
Public SomeOtherStuff(string rabble)
{
//set bloop
}
任何投入将不胜感激
this()
尽可能使用是一种很好的做法。否则,您将复制一些代码,这违反了 DRY(不要重复自己)原则。重复自己的问题在于,每次您需要进行更改时——即使是对一行代码的简单更改——你必须记住在多个地方进行相同的更改,并保持多个副本同步。
您应该只在需要时“复制”代码,因为它需要不同,所以它不再是重复的。这样,重复是向读者传达的信息,即代码实际上是不同的,并且是有原因的。
两个独立的构造函数的问题在于,它们通常包含相同的代码,当一个构造函数被更改而另一个不被更改时,这可能会导致以后的重构出现问题。因此,您可以将带有 this() 的构造函数链接视为DRY 原则的应用。
这就是链接构造函数的方式,这是一件非常有效的事情。
我真的很喜欢第一种方式(构造函数链接),但如果你觉得第二种方式更具可读性,那就去吧,你可以将构造函数中的任何重复代码放入私有方法中,以避免破坏人们提到的 DRY 原则。
此外,我也总是尝试以我正在编写的代码的风格进行编码 - 所以如果主要风格是其中一种,我会采用这种风格以保持一致性。
我不太关心可读性,而更关心可靠性。
链接构造函数比复制粘贴构造函数方法体要好得多。
DRY 的另一种方法是编写一个初始化方法,例如Init(rabble, bloop)
,所有构造函数都调用这个方法。
这往往不太容易混淆,而且更灵活,尤其是在有许多构造函数的情况下。