在默认构造函数中包含代码的做法很差

bro*_*man 8 c# oop

我和一位在C#经验中有多年资历的开发人员合作过.我不再有办法联系他,我记得他说,将代码包含在默认参数less constructor中并不是一个好主意,但我不记得原因.

将代码包含在C#中的默认构造函数或任何语言中是好的做法还是不好的做法?

小智 8

这取决于具体情况,但将代码置于默认构造函数中绝对是不错的做法.如果您需要,请继续进行.


Guf*_*ffa 6

这取决于具体情况,有时需要它,有时它可以使用,有时它不应该存在.

重要的是任何构造函数都应该使对象处于正确的初始化状态.如果一个对象总是需要一些代码来进行初始化,但是没有特定的输入来做到这一点,那么无参数构造函数就是一个好地方.


Ati*_*tif 5

想到的是Effective Java的第17项(作者Joshua Bloch):

第17项:继承的设计和文件,或禁止它

他解释说构造函数不应该调用可覆盖的方法:

public class Super {
    // Broken - constructor invokes an overridable method
    public Super() {
        overrideMe();
    }
    public void overrideMe() {
    }
}
Run Code Online (Sandbox Code Playgroud)

最终发生的是你正在调用超类的构造函数(当你创建子类的实例时),你会得到意想不到的行为.

如果构造函数确实调用了类中的其他方法,则需要在API中对此进行记录,以便在开发人员对其进行子类化时,他们将知道会发生什么.

否则,将代码放入构造函数中是没有害处的.


归档时间:

查看次数:

1375 次

最近记录:

12 年,10 月 前