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

前端之家收集整理的这篇文章主要介绍了delphi – 从TObject派生时是否需要调用base方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个从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坏了所以,我永远不会省略一个继承的调用,因为该调用没有任何作用.

正常实例方法的情况有所不同.您更希望忽略基类实现并提供全新的实现是更可信的.但是根据派生类要做的事情做出决定,而不是超类是否有一个空的方法实现.

猜你在找的Delphi相关文章