【问题标题】:Why do TObject.AfterConstruction and BeforeConstruction have public visibility?为什么 TObject.AfterConstruction 和 BeforeConstruction 具有公共可见性?
【发布时间】:2015-05-08 10:10:25
【问题描述】:

今天,当我不得不重写 TObjectBeforeConstruction 方法时,我想到了一个非常简单的问题:

为什么TObject 方法AfterConstructionBeforeConstruction 具有public 可见性?

我希望他们是protected。 他们不是的原因是什么?

我无法想象在不调用该类的构造函数或析构函数的情况下调用AfterConstructionBeforeConstruction 的有效目的。你呢?

【问题讨论】:

  • 我确定有人问过这个问题(或者可能没有问过,但回答了)...
  • 很可能是开发者搞错了
  • 哦,所以it's been 关于TObject.InitInstance,并没有直接回答你的问题。但正如您所看到的,还有更多应该受到保护的东西,但事实并非如此。收回我最初的评论...
  • 也许,@DavidHeffernan 的假设是正确的。 Bob博士在Delphi 4上写了this,上面说这些方法当时都是protected
  • 如果它们受到保护但已在以后公开,则很可能不是错误,而是出于某种目的。

标签: delphi delphi-xe4 tobject


【解决方案1】:

上一个问题询问为什么其他一些方法是公共的而不是受保护的,the answer 是它们在某些时候需要由未附加到类的实用函数调用。

TObject.AfterConstruction 就是由 System._AfterConstruction 这样的实用函数调用的。如果它受到(严格)保护,那么该独立函数将无法访问该方法。

所有TObject 的方法都是公开的。* 我们或许可以找到解释为什么每个方法都是公开的理由,但在某一点上,我怀疑任何给定方法的根本原因公开是所有其他人也是。

一旦 Delphi 公开了这些方法,任何降低其可见性都会有破坏现有代码的风险。


* 出于某种原因,GetDisposedCheckDisposed 除外。与大部分 TObject 相比,它们相对较新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-28
    • 2017-04-10
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    相关资源
    最近更新 更多