为什么 TObject.AfterConstruction 和 BeforeConstruction 具有 public 可见性?
Why do TObject.AfterConstruction and BeforeConstruction have public visibility?
今天,当我不得不重写 TObject
的 BeforeConstruction
方法时,我想到了一个非常简单的问题:
为什么 TObject
方法 AfterConstruction
和 BeforeConstruction
具有 public
可见性?
我预计他们会 protected
。
他们不是的原因是什么?
我无法想象在不调用 class 的构造函数或析构函数的情况下调用 AfterConstruction
或 BeforeConstruction
的有效目的。你呢?
之前的一个问题询问为什么其他一些方法是 public 而不是受保护的,并且 the answer 是它们在某些时候需要被未附加到 class.
TObject.AfterConstruction
就是这样一个效用函数 System._AfterConstruction
调用的。如果它受到(严格)保护,那么该独立函数将无法访问该方法。
全部TObject
的方法都是public.*我们大概可以找到理由来解释为什么每个方法都是public,但是在某一点上,我怀疑任何给定方法是 public 的根本原因是所有其他方法也是。
一旦 Delphi 与这些方法 public 一起发布,任何降低其可见性的行为都有破坏现有代码的风险。
* 由于某些原因,GetDisposed
和 CheckDisposed
除外。与 TObject
.
的大部分相比,它们相对较新
今天,当我不得不重写 TObject
的 BeforeConstruction
方法时,我想到了一个非常简单的问题:
为什么 TObject
方法 AfterConstruction
和 BeforeConstruction
具有 public
可见性?
我预计他们会 protected
。
他们不是的原因是什么?
我无法想象在不调用 class 的构造函数或析构函数的情况下调用 AfterConstruction
或 BeforeConstruction
的有效目的。你呢?
之前的一个问题询问为什么其他一些方法是 public 而不是受保护的,并且 the answer 是它们在某些时候需要被未附加到 class.
TObject.AfterConstruction
就是这样一个效用函数 System._AfterConstruction
调用的。如果它受到(严格)保护,那么该独立函数将无法访问该方法。
全部TObject
的方法都是public.*我们大概可以找到理由来解释为什么每个方法都是public,但是在某一点上,我怀疑任何给定方法是 public 的根本原因是所有其他方法也是。
一旦 Delphi 与这些方法 public 一起发布,任何降低其可见性的行为都有破坏现有代码的风险。
* 由于某些原因,GetDisposed
和 CheckDisposed
除外。与 TObject
.