Узнайте, наследует ли Delphi ClassType от другого ClassType? - PullRequest
5 голосов
/ 14 декабря 2010

В 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 ]

13 голосов
/ 14 декабря 2010

Использовать InheritsFrom:

if TApple.InheritsFrom(TFruit) then
  ...

Вы также можете использовать

var
  Fr: TFruitClass;
  X: TObject;
begin
  if X.InheritsFrom(TFruit) then
    Fr := TFruitClass(X.ClassType);
end;
0 голосов
/ 16 декабря 2010

Я предполагаю, что вы передаете переменную FruitClass какому-либо методу, и в этом случае вы должны прочитать:

  if FruitClass.InheritsFrom(TApple) then

Обратите внимание, что вам даже не нужно проверять nil, так как InheritsFrom является функцией классаи, следовательно, не требует назначения переменной Self.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...