FormClose继承

Roä*_*oäc 0 delphi inheritance delphi-10.1-berlin

我对Delphi很新(我使用的是版本10.1柏林),我试图理解继承是如何工作的.

假设我有2个表单,在关闭时必须执行相同的操作.为了避免代码重复,我最初的想法是创建一个TFoobarForm继承自的超类,TForm然后创建一个FormClose这样的过程:

procedure TFoobarForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  { Some code }
end;
Run Code Online (Sandbox Code Playgroud)

在那之后,我想创建两个表单,让我们说,TFooFormTBarForm继承自TFoobarForm.但我不知道是否有办法使这些新表单执行超类FormClose操作,而无需从继承自它的每个类手动调用该过程.

最后,我正在寻找的是一种避免写这个的方法:

procedure TFooForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited FormClose(Sender, Action);
end;
Run Code Online (Sandbox Code Playgroud)

对于每个子类TFoobarForm.

Rem*_*eau 5

让基类覆盖虚DoClose()方法:

type
  TFoobarForm = class(TForm)
  protected
    procedure DoClose(var Action: TCloseAction); override;
  end;

procedure TFoobarForm.DoClose(var Action: TCloseAction);
begin
  { Some code }
  // call inherited to trigger the OnClose event, if it is assigned...
end;
Run Code Online (Sandbox Code Playgroud)

然后你根本不需要OnClose在派生类中分配一个事件处理程序(除非他们真的想要以不同于基类的方式处理事件).