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)
在那之后,我想创建两个表单,让我们说,TFooForm
并TBarForm
继承自TFoobarForm
.但我不知道是否有办法使这些新表单执行超类FormClose
操作,而无需从继承自它的每个类手动调用该过程.
最后,我正在寻找的是一种避免写这个的方法:
procedure TFooForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
inherited FormClose(Sender, Action);
end;
Run Code Online (Sandbox Code Playgroud)
对于每个子类TFoobarForm
.
让基类覆盖虚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
在派生类中分配一个事件处理程序(除非他们真的想要以不同于基类的方式处理事件).
归档时间: |
|
查看次数: |
171 次 |
最近记录: |