Как я могу узнать, является ли один TClass производным от другого? - PullRequest
6 голосов
/ 22 ноября 2011

Я пытаюсь сделать что-то вроде этого:

function CreateIfForm ( const nClass : TClass ) : TForm;
begin
  if not ( nClass is TFormClass ) then
    raise Exception.Create( 'Not a form class' );
  Result := ( nClass as TFormClass ).Create( Application );
end;

Это приводит к ошибке «Оператор не применим к этому типу операнда».Я использую Delphi 7.

1 Ответ

18 голосов
/ 22 ноября 2011

Сначала вы должны проверить, можете ли вы изменить функцию, чтобы она принимала только класс формы:

function CreateIfForm(const nClass: TFormClass): TForm;

и обойти необходимость проверки типа и приведения.

Если это невозможно, вы можете использовать InheritsFrom:

function CreateIfForm(const nClass: TClass): TForm;
begin
  if not nClass.InheritsFrom(TForm) then
    raise Exception.Create('Not a form class');
  Result := TFormClass(nClass).Create(Application);
end;
...