【发布时间】:2018-03-06 09:08:52
【问题描述】:
上下文
在 DelphiAST 中有一个基类:TmwSimplePasPar,用于解析 Delphi 代码。
此外还有一个类:TPasSyntaxTreeBuilder,它应该覆盖其基类中的每个方法。
问题
有没有办法检查子类是否覆盖了其基类中的每个虚拟方法?
能加入断言就好了。
TPasSyntaxTreeBuilder.Create;
begin
Assert(Self.OverridenMethods.Count = (BaseClass.VirtualMethodCount - TObject.VirtualMethodCount));
....
请注意,我说的是所有虚拟方法,而不仅仅是抽象方法(不实现抽象方法会发出警告)。
【问题讨论】:
-
为什么不直接使用抽象方法呢?这就是他们的目的。如果基类中存在必须始终执行的行为,则让消费者调用基方法并让基方法执行必须由后代覆盖的抽象方法。
-
@J 我猜有第三方参与(DelphiAST?),所以 Johan 无法控制基类的来源。
-
@Nil DelphiAST 在 git 上...我很想亲自分支并修复它。这是一个糟糕的模式。
-
询问或责怪20年前编写代码的原作者。
-
@J... 那么我同意,听起来抽象方法是实现 OP 目标的方法。
标签: delphi inheritance rtti virtual-functions