从TObject派生时是否需要调用base方法?

10 delphi inheritance

我有一个类来自TObject,如果我不调用父方法,它是不是很糟糕?我问,因为看着TObject.Create/ Destroy,他们什么都不做.

这就是我们自己覆盖/揭露它们的原因.

没有代码示例,我只想确定.

Dav*_*nan 17

最常见的行为是打电话inherited.所以,如果我明确地不想继承行为,我不会打电话inherited.否则,我做.如果继承的行为是no-op TObject.Create/Destroy,我仍然会打电话inherited.

还要注意构造函数和析构函数的位置可能与其他方法略有不同.您需要跳过对继承方法的调用,这是非常罕见的.我想不出一个例子.总是建造者正在创造和摧毁其他物体,所以你怎么能考虑跳过那个?

我知道有些作者编写的代码inherited在直接派生时会遗漏TObject,因为他们知道实现TObject没有做任何事情.我不喜欢这样,对我来说这样做是错误的.实现细节TObject不应泄漏到派生类中.

我很确定TObject.Create/Destroy永远都是无操作的.如果Embarcadero改变了那么那么多代码就会破坏.但是你的课程呢?假设你有一个派生自的类TObject.然后你有另一个派生自那的类:

TMyClass1 = class
  ....
end;

TMyClass2 = class(TMyClass)
  ....
end;
Run Code Online (Sandbox Code Playgroud)

你没有构造函数,TMyClass1构造函数TMyClass2如下所示:

constructor TMyClass2.Create;
begin
  // no need to call inherited, it's a no-op
  FMyObj := TBlahBlah.Create;
end;
Run Code Online (Sandbox Code Playgroud)

然后有一天你修改TMyClass1构造函数来做某事.现在TClass2坏了.所以,我永远不会省略一个电话,inherited因为那个电话什么也没做.

普通实例方法的情况略有不同.您希望忽略基类实现并提供全新的实现更合理.但是根据派生类想要做什么而不是超类是否具有该方法的空实现来做出决定.