Delphi Форма и Обобщения - PullRequest
       34

Delphi Форма и Обобщения

1 голос
/ 24 апреля 2020

У меня проблема, посмотрим, сможете ли вы мне помочь. У меня есть базовая форма.

type
  TForm_Base = class(TForm)
  oObjectoVO : TObject;
  ...
  procedure Search<M:class,constructor>;
  ...
  procedure TForm_Base.Search<M>;
  begin
    TBussinesObj<M>.Pesquisa(FDMemTableGrid);
  end;

И у меня есть форма, которая наследует базовую форму.

procedure TForm_Client.FormCreate(Sender: TObject);
begin
  // TClient is class simple with the properties(write, read) of id, name, ...
  oObjectoVO := TClient.Create;
end;

procedure TForm_Client.ButtonSearchClick(Sender: TObject);
begin
  inherited;
end;

procedure TForm_Client.FormDestroy(Sender: TObject);
begin
  FreeAndNil(oObjectoVO);
end;

Моя проблема здесь. Я не могу передать тип объекта, созданного в форме клиента, в метод generi c (Поиск) в базовую форму. Я не знаю, возможно ли это.

procedure TForm_Base.ButtonSearchClick(Sender: TObject);
begin
  Search<oObjectoVO.ClassType>; ******* Error *******
end;

Танки.

1 Ответ

3 голосов
/ 24 апреля 2020

Generics - это конструкция времени компиляции. Рассмотрим этот код:

Search<oObjectoVO.ClassType>

Вы пытаетесь создать экземпляр c с типом, который не известен до времени выполнения.

Вам необходимо изменить Search с generi c не являющийся generi c и принимающий параметр, который определяет класс.

...