我有一个从TObject下降的类,如果我不调用父方法,是不是坏?我问,因为看TObject.Create / Destroy,他们什么都不做.
这就是为什么我们自己覆盖/暴露它们的原因.
没有代码示例,我只想确保.
解决方法
最常见的行为是调用继承.所以如果我明确地不想继承的行为,我不会调用继承.否则,我做.如果继承的行为是一个无操作的TObject.Create / Destroy,我仍然调用继承.
还要注意,构造函数和析构函数的构造可能与其他方法有所不同.这是罕见的,您需要跳过对继承方法的调用.我不能想像一个例子.建设者总是在创造和摧毁其他物体,那么你怎么可以考虑跳过呢?
我知道一些作者在直接从TObject派生时编写了省略继承的代码,因为他们知道TObject中的实现什么都不做.我不喜欢,对我来说这是一个错误. TObject的实现细节不应该泄漏到派生类中.
我很确定TObject.Create / Destroy将永远是no-ops.如果Embarcadero改变了,那么这么多的代码会破裂.但是你的一个课程呢?假设你有一个派生自TObject的类.然后你有另一个类派生:
TMyClass1 = class .... end; TMyClass2 = class(TMyClass) .... end;
您没有TMyClass1的构造函数和TMyClass2的构造函数,如下所示:
constructor TMyClass2.Create; begin // no need to call inherited,it's a no-op FMyObj := TBlahBlah.Create; end;
那么有一天你修改TMyClass1构造函数来做某事.现在TClass2坏了所以,我永远不会省略一个继承的调用,因为该调用没有任何作用.
正常实例方法的情况有所不同.您更希望忽略基类实现并提供全新的实现是更可信的.但是根据派生类要做的事情做出决定,而不是超类是否有一个空的方法实现.