上下文
在 DelphiAST 中,有一个基类:TmwSimplePasPar
,用于解析 Delphi 代码。
此外,还有一个类:TPasSyntaxTreeBuilder
,它应该重写其基类中的每个方法。
问题
有没有办法检查后代类是否覆盖了其基类中的每个虚拟方法?
能够放入断言就好了。
TPasSyntaxTreeBuilder.Create;
begin
Assert(Self.OverridenMethods.Count = (BaseClass.VirtualMethodCount - TObject.VirtualMethodCount));
....
请注意,我谈论的是所有虚拟方法,而不仅仅是抽象方法(不实现抽象方法会发出警告)。
最佳答案
查看该类的 VMT 插槽,并再次将它们与基类的 VMT 插槽进行比较。
在Spring4D中有这个函数(在Spring.VirtualClass.pas
中):
function IsVirtualMethodOverride(baseClass, classType: TClass; method: Pointer): Boolean;
我不会在这里发布完整的代码,因为它适用于一些内部 VMT 结构记录 - 请自行查看代码。
FWIW:我刚刚发现该例程中有一个小错误,我会尽快修复。
关于delphi - 如何检查后代类是否覆盖所有虚拟方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46404495/