加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:30:22 所属栏目:大数据 来源:网络整理
导读:我有一个从TObject下降的类,如果我不调用父方法,是不是坏?我问,因为看TObject.Create / Destroy,他们什么都不做. 这就是为什么我们自己覆盖/暴露它们的原因. 没有代码示例,我只想确保. 解决方法 最常见的行为是调用继承.所以如果我明确地不想继承的行为,我
我有一个从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坏了所以,我永远不会省略一个继承的调用,因为该调用没有任何作用.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读