【发布时间】:2019-03-13 14:25:22
【问题描述】:
我一直将类助手理解为扩展类或部分类。它们就像原始基类代码的扩展。如果我复制代码的接口部分并将其添加到基类中并为实现也这样做,代码将完全以与助手相同的方式运行。这让我总能理解助手中的多态性,以及为什么它们不能覆盖基类中的方法等。
但我发现这并不完全正确,因为如果是这样,那么为什么他们不允许覆盖基类的祖先-父级的方法?
这是我的意思的一个例子(我只会放标题的代码而没有实现代码):
type
TAncestor = class
public
procedure Test; virtual;
end;
TBase = class(TAncestor)
public
end;
那么为什么下一个代码不正确:
THelper = class helper of TBase
public
procedure Test; override;
end;
我的错误是:
在基类中找不到方法“测试”!
【问题讨论】:
-
助手安装在侧面。他们只是扩展名称空间。要覆盖虚拟方法,您需要子类化。
-
@DavidHeffernan 实际上我是子类,TBase 是 TAncestor 的子类...
-
你需要继承
TBase而不是扩展TBase。或者重写TBase中的方法。
标签: delphi polymorphism delphi-xe3