找出Delphi ClassType是否继承自其他ClassType?

时间:2010-12-14 19:30:30

标签: delphi inheritance

在Delphi中,给出以下内容:

TFruit = class;
TFruitClass = class of TFruit;

TApple = class(TFruit);

TRedApple = class(TApple);

如果我有一个TFruitClass变量,我怎样才能知道它是否继承自TApple?例如。说我有

var
  FruitClass: TFruitClass;
...
FruitClass := TRedApple;

在这种情况下,如何验证FruitClass是否确实从TApple继承?使用FruitClass is TApple仅适用于类实例。

2 个答案:

答案 0 :(得分:13)

使用InheritsFrom:

if TApple.InheritsFrom(TFruit) then
  ...

您也可以使用

var
  Fr: TFruitClass;
  X: TObject;
begin
  if X.InheritsFrom(TFruit) then
    Fr := TFruitClass(X.ClassType);
end;

答案 1 :(得分:0)

我假设您将FruitClass变量传递给某个方法,在这种情况下您应该阅读:

  if FruitClass.InheritsFrom(TApple) then

请注意,您甚至不需要测试nil,因为InheritsFrom是一个类函数,因此不需要分配Self变量。