1

假设我想覆盖某个已经在某处定义的类,例如,假设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 子句中声明这两个单元中的每一个的顺序,例如,在 usingSystem.Classes之前使用MyClasses。但这应该是可能的吗?这样做时我应该注意什么?

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

4

1 回答 1

5

你已经给出了答案。

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

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

对不起。

于 2012-07-07T02:46:15.960 回答