はDelphiコを継承にオーバーライドの手続きがない場合、明示的な呼

StackOverflow https://stackoverflow.com/questions/53715

  •  09-06-2019
  •  | 
  •  

質問

はDelphiコを継承にオーバーライドの手続きがない場合、明示的な呼び出しコードのie(継承;)私は以下のような構造をとります(スーパーサブクラス)

TForm>>TBaseForm>>TAnyOtherForm

すべてのフォームのプロジェクトから派生TBaseFormについては、すべての標準設定および破壊部品に使用されるべての形式(セキュリティ、バリデーションect).

TBaseFormはonCreateとonDestroy手続きのコードなのだ(ie)をお忘れの追加に受け継がれるonCreateにTAnyOtherFormうDelphiですか?い参考文献をウェブといえる必要ありませんが、どうになれば、場合に呼び出されるので省略します。

または電話を受け継いで通話です。

役に立ちましたか?

解決

いのままにした場合に呼び出を受け継ぐものであれば、呼び出されます。その他ことはできなくなるオーバーライドする方法及び完全にommitの親版です。

他のヒント

のであると言いましたが、いない呼び出しを受け継いできた破壊のanyオブジェクトでメモリ解放されます。あるツールをチェックのためにはソースコード.

受け継がれてきた電話について説明します。一般的な言語を自動的に通話を受け継機と同等の状況(クラスのコンストラクタが含まれません)。

でんを受け継ぎを呼ぶクラスのコンストラクタです。この場合、基底クラスのニーズを初期化データまでのアクセス違反の流れによるものでした。

あとだれかのオーバーライドDoCreateとDoDestoryおTBaseFormクラスできめ一部のコードが実行されずに実施子どもの。

// interface

TBaseForm = Class(TForm)
...
Protected
    Procedure DoCreate(Sender : TObject); Override;
End

// implementation

Procedure TBaseForm.DoCreate(Sender : TObject);
Begin
    // do work here

    // let parent call the OnCreate property  
    Inherited DoCreate(Sender);
End;

を継承する必要を明示的に呼び出してその子孫のオブジェクトと同様に可視化継承関係を示します。ご利用の場合クラスの完了後に追加され継承された場合、自動的に<日本語仮抄訳>欧州連の定義としてオーバーライドがないために再び).ご利用の場合は視覚的な形態で継承して追加された場合はイベントの腕の形式を通してエディタで追加を継承しています。

継承されたコードを呼び出されることはありません暗黙のうちに、他から表示されます。お電話で説明します。ここかで役立つ柔軟性です。のためのインスタンスするためには、いくつかの前処理コードの事前の承継コード、いくつかのポスト処理コードす。このような:

procedure TMyCalcObject.SolveForX;
begin
  ResetCalcState;
  inherited SolveForX;
  PostProcessSolveForX;
end;

No.この点をオーバー.

お電話で説明します。これにより多くの柔軟性から選択できる点コードの継承方法です。でも大きな源ございます。でも忘れずに継承機能をコンパイラがないからだったので意図的にまたはあなただけ忘れてしまいました。

があるはずのような指令"skip_inheritedだが、コンパイラおすすめの継承方法です。

コンパイラを簡単に報われている場合はエラーになかなか見つから受け継いだ""または"skip_inherited".その意味で忘れてしまいました。でも残念なことに誰もいないにCodeGear考えています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top