gpt4 book ai didi

delphi - 如何检查后代类是否覆盖所有虚拟方法?

转载 作者:行者123 更新时间:2023-12-03 15:23:02 26 4
gpt4 key购买 nike

上下文

在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com