我和一位在C#经验中有多年资历的开发人员合作过.我不再有办法联系他,我记得他说,将代码包含在默认参数less constructor中并不是一个好主意,但我不记得原因.
将代码包含在C#中的默认构造函数或任何语言中是好的做法还是不好的做法?
这取决于具体情况,有时需要它,有时它可以使用,有时它不应该存在.
重要的是任何构造函数都应该使对象处于正确的初始化状态.如果一个对象总是需要一些代码来进行初始化,但是没有特定的输入来做到这一点,那么无参数构造函数就是一个好地方.
想到的是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 次 |
| 最近记录: |