Jer*_*dge 1 delphi inheritance overriding class delphi-xe2
假设我想覆盖某个已在某处定义的类,例如,让我们说System.Classes.TOriginalClass,我想保留原始的类名.我知道我必须定义这样的东西:
type
TOriginalClass = class(System.Classes.TOriginalClass)
...
end;
Run Code Online (Sandbox Code Playgroud)
如果我想在声明它的同一单元中实现这个自定义重写类,我没有任何问题,只要我想要它使用的每个地方都在我声明这个类的下面.
但是假设我想在另一个单元中使用这个替换类.System.Classes是一个非常常见的单位,几乎用于我的每一个单位.我希望能够同时使用该System.Classes单元以及我创建此重写版本的单元,让我们称之为MyClasses.
我知道在任何其他单元中,我可以通过在声明中包含完整的单元/类来完成此操作,如下所示:
type
TMyClass = class(MyClasses.TOriginalClass)
...
end;
Run Code Online (Sandbox Code Playgroud)
但是,这几乎会打败整个目的,因为我会被强制包括MyClasses.在前面作为前缀TOriginalClass.我想做的是不必担心TOriginalClass最初宣布的地方,并宣布这样......
type
TMyClass = class(TOriginalClass)
...
end;
Run Code Online (Sandbox Code Playgroud)
...虽然确定TMyClass将继承MyClasses.TOriginalClass而不是System.Classes.TOriginalClass.
我很确定这将包含我在uses子句中声明这两个单元中的每一个的顺序,例如,在使用System.Classes之前使用MyClasses.但这应该是可能的吗?这样做时我应该注意什么?
PS - TOriginalClass我知道这不是一个真正的类,我用它来演示最初声明的任何类System.Classes.同样适用于任何单位的任何原始类.
你已经给出了答案.
是的,您可以MyClasses.TOriginalClass仅通过指定派生TOriginalClass,但它要求MyClasses在uses列表中稍后出现System.Classes,或者System.Classes从uses列表中完全省略.对不起,别无他法.
如果您不符合条件TOriginalClass,编译器将使用它遇到的"最后"声明.它不会自动使用派生最多的一个.
抱歉.