gpt4 book ai didi

delphi - 我可以继承一个具有相同名称的类并在没有单位前缀的其他单位中自由使用它吗?

转载 作者:行者123 更新时间:2023-12-03 19:18:51 25 4
gpt4 key购买 nike

假设我想覆盖某个已经在某处定义的类,例如,假设 System.Classes.TOriginalClass ,我想保留原来的类名。我知道我必须像这样定义它:

type
TOriginalClass = class(System.Classes.TOriginalClass)
...
end;

如果我想在声明它的同一单元中实现这个自定义覆盖类,我没有任何问题,只要我希望它使用的每个地方都在我声明这个类的位置下方。

但是假设我想在另一个单元中使用这个替换类。 System.Classes是一个非常常见的单元,几乎用于我的所有其他单元。我希望能够同时使用 System.Classes单元以及我创建此覆盖版本的单元,我们称之为 MyClasses .

我知道在任何其他单元中,我可以通过在声明中包含完整的单元/类来实现这一点,如下所示:
type
TMyClass = class(MyClasses.TOriginalClass)
...
end;

但是,这几乎会破坏整个目的,因为我将被迫包含 MyClasses.作为 TOriginalClass 之前的前缀.我想做的就是不用担心在哪里 TOriginalClass最初是声明的,然后这样声明...
type
TMyClass = class(TOriginalClass)
...
end;

...同时确定 TMyClass将继承自 MyClasses.TOriginalClass而不是 System.Classes.TOriginalClass .

我很确定这将包括我在uses 子句中声明这两个单元的顺序,例如,使用 System.Classes使用前 MyClasses .但这应该是可能的吗?这样做时我应该注意什么?

PS- TOriginalClass我知道这不是一个真正的类,我用它来演示最初在 System.Classes 中声明的任何类.这同样适用于任何单位的任何原始类(class)。

最佳答案

你已经给出了答案。

是的,您可以从 MyClasses.TOriginalClass 派生通过仅指定 TOriginalClass ,但它要求 MyClasses稍后在 uses列出比 System.Classes , 或 System.Classes uses 中省略了完全列出。没有别的办法,抱歉。

如果您不符合条件 TOriginalClass ,编译器将使用它遇到的“最后一个”声明。它不会自动使用最衍生的那个。

对不起。

关于delphi - 我可以继承一个具有相同名称的类并在没有单位前缀的其他单位中自由使用它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11371496/

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