から派生したクラスがTObject
ありますが、親メソッドを呼び出さないとダメですか? TObject.Create
/を見たときDestroy
、彼らは何もしないので、私は尋ねます。
そのため、それらを自分でオーバーライド/公開します。
コード例はありません。確認したいだけです。
から派生したクラスがTObject
ありますが、親メソッドを呼び出さないとダメですか? TObject.Create
/を見たときDestroy
、彼らは何もしないので、私は尋ねます。
そのため、それらを自分でオーバーライド/公開します。
コード例はありません。確認したいだけです。
最も一般的な動作は、 を呼び出すことinherited
です。したがって、継承された動作を明示的に望まない場合は、 を呼び出しませんinherited
。そうでなければ、私はそうします。継承された動作が のようTObject.Create/Destroy
に何もしない場合でも、 を呼び出しますinherited
。
コンストラクタとデストラクタの状況は、おそらく他のメソッドの状況とは少し異なることに注意してください。継承されたメソッドへの呼び出しをスキップする必要があることは非常にまれです。例が思いつきません。コンストラクターは常に他のオブジェクトを作成および破棄しているため、それをスキップすることをどのように考えることができるでしょうか?
の実装が何もしないことを知っているため、inherited
から直接派生するときに省略されるコードを作成する作成者がいることを私は知っています。私はそれが好きではなく、私にとってそれをするのは間違いです. の実装の詳細が派生クラスに漏れてはなりません。 TObject
TObject
TObject
私はそれTObject.Create/Destroy
が常にノーオペレーションになると確信しています。Embarcadero がそれを変更した場合、非常に多くのコードが壊れてしまいます。しかし、あなたのクラスの1つはどうですか。から派生したクラスがあるとします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
は壊れています。そのため、呼び出しは何もしないため、呼び出しを省略することinherited
はありません。
通常のインスタンス メソッドの場合は少し異なります。基本クラスの実装を無視して、まったく新しい実装を提供する方が妥当です。ただし、スーパークラスにメソッドの空の実装があるかどうかではなく、派生クラスが何をしたいのかに基づいて決定してください。