在Windows下使用FreePascal,我想在后代Proc/Func之前调用虚拟过程/函数,避免在后代中使用
inherited
。
必须先激发虚拟体,然后再激发后代。
祖先:
procedure AfterRefresh( d:tdataset); virtual;
...
procedure Ancestror.AfterRefresh(d:dataset);
begin
doSum();
writeLn('I am in ancestror');
end;
后裔:
descendant.afterRefresh(d:tdataset); override;
begin
writeLn('I am in descendant');
end;
我期望得到这样的结果:
I am in ancestror
I am in descendant
您所要求的通常不受支持(但并非不可能,如果您愿意破解 vtable 等),但违背了多态性及其用途的精神。
您应该考虑针对您的情况采取完全不同的方法。我建议将您想要的过程按照您想要的顺序放入一个列表中,然后您可以运行该列表,按顺序调用每个过程。