FormClose 继承
FormClose inheritance
我是 Delphi 的新手(我使用的是柏林 10.1 版),我正在尝试了解继承的工作原理。
假设我有 2 个表单,它们在关闭时必须执行相同的操作。为了避免代码重复,我最初的想法是创建一个继承自 TForm
的 superclass、TFoobarForm
,然后创建一个这样的过程 FormClose
:
procedure TFoobarForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
{ Some code }
end;
之后,我想创建 2 种形式,比方说 TFooForm
和 TBarForm
,它们继承自 TFoobarForm
。但我不知道是否有办法让这些新表单执行 superclass FormClose
操作,而无需从每个继承自它的 class 手动调用过程。
最后,我要找的是一种避免写这个的方法:
procedure TFooForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
inherited FormClose(Sender, Action);
end;
对于 TFoobarForm
的每个子class。
让基础 class 覆盖虚拟 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;
那么您根本不需要在派生的 class 中分配 OnClose
事件处理程序(除非他们真的想以不同于基础 class 的方式处理事件).
我是 Delphi 的新手(我使用的是柏林 10.1 版),我正在尝试了解继承的工作原理。
假设我有 2 个表单,它们在关闭时必须执行相同的操作。为了避免代码重复,我最初的想法是创建一个继承自 TForm
的 superclass、TFoobarForm
,然后创建一个这样的过程 FormClose
:
procedure TFoobarForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
{ Some code }
end;
之后,我想创建 2 种形式,比方说 TFooForm
和 TBarForm
,它们继承自 TFoobarForm
。但我不知道是否有办法让这些新表单执行 superclass FormClose
操作,而无需从每个继承自它的 class 手动调用过程。
最后,我要找的是一种避免写这个的方法:
procedure TFooForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
inherited FormClose(Sender, Action);
end;
对于 TFoobarForm
的每个子class。
让基础 class 覆盖虚拟 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;
那么您根本不需要在派生的 class 中分配 OnClose
事件处理程序(除非他们真的想以不同于基础 class 的方式处理事件).