Delphi形式和泛型

我有问题,请问您能否帮我。我有一个基本表格。

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;

战车

评论
  • lsint
    lsint 回复

    泛型是编译时的构造。考虑以下代码:

    Search<oObjectoVO.ClassType>
    

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

    You need to change Search from being a generic to being non-generic and accepting a parameter that specifies the class.