10

TObject今日、のBeforeConstructionメソッドをオーバーライドしなければならなかったときに、1 つの非常に単純な質問が頭に浮かびました。

TObjectメソッドAfterConstructionと可視性BeforeConstructionがあるのはなぜですか?public

私は彼らがそうであると思っていましたprotected。そうでない理由は何ですか?

そのクラスのコンストラクタまたはデストラクタを呼び出すAfterConstructionか、呼び出さずに呼び出す有効な目的を想像できません。BeforeConstructionあなたは?

4

1 に答える 1

10

以前の質問で、なぜ他のメソッドが保護ではなく公開されているのかという質問がありましたが、その答えは、ある時点でクラスにアタッチされていないユーティリティ関数によって呼び出される必要があるというものでした。

TObject.AfterConstructionは、まさにそのようなユーティリティ関数によって呼び出されますSystem._AfterConstruction。(厳密に)保護されている場合、そのスタンドアロン関数はメソッドにアクセスできません。

のすべてのメソッドTObjectは public です。* それぞれのメソッドが public である理由を説明する理論的根拠をおそらく見つけることができますが、ある時点で、特定のメソッドが public である根本的な理由は、他のすべてのメソッドも public であるということだと思います。

Delphi がこれらのメソッドを公開してリリースされると、それらの可視性が低下すると、既存のコードが破損する危険がありました。


※なぜかGetDisposedとを除く。CheckDisposedの大部分と比較して、それらは比較的新しいものですTObject

于 2015-05-08T21:41:12.953 に答える