如何检查后代 class 是否覆盖了所有虚拟方法?

How do I check that a descendent class overrides all virtual methods?

上下文

在 DelphiAST 中有一个基础 class: TmwSimplePasPar 解析 Delphi 代码。
此外还有一个 class: TPasSyntaxTreeBuilder 应该覆盖其基础 class 中的每个方法。

问题

有没有办法检查后代 class 是否覆盖了其基础 class 中的每个虚拟方法?
如果能加入断言就好了。

TPasSyntaxTreeBuilder.Create;
begin
  Assert(Self.OverridenMethods.Count = (BaseClass.VirtualMethodCount - TObject.VirtualMethodCount)); 
  ....

请注意,我说的是所有虚拟方法,而不仅仅是抽象方法(不实现抽象方法会发出警告)。

查看 class 的 VMT 插槽并再次比较它们与基础 class 的 VMT 插槽。

在 Spring4D 中有这个函数(在 Spring.VirtualClass.pas 中):

function IsVirtualMethodOverride(baseClass, classType: TClass; method: Pointer): Boolean;

我不会在这里发布整个代码,因为它适用于一些内部 VMT 结构记录 - 请自行查看代码。

FWIW:我刚刚发现该例程中有一个小错误,我会尽快修复它。