1

我有问题,看看你能不能帮帮我。我有一个基本形式。

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;

坦克。

4

1 回答 1

3

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

Search<oObjectoVO.ClassType>

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

您需要Search从泛型更改为非泛型并接受指定类的参数。

于 2020-04-24T12:20:20.223 回答