Delphi 表单和泛型

Delphi Form and Generics

我有一个问题,看看你能不能帮我。我有一个基本表格。

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;

我的问题就在这里。我无法将在客户端表单中实例化的对象的类型传递给通用方法 (Search),再传递给基本表单。不知道可不可以

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

坦克。

泛型是一种编译时结构。考虑这段代码:

Search<oObjectoVO.ClassType>

您正在尝试使用直到 运行 时间才知道的类型实例化泛型。

您需要将 Search 从通用更改为非通用并接受指定 class 的参数。