如何从任意对象创建泛型类实例

时间:2014-11-02 13:48:25

标签: delphi generics

我定义了一个泛型类:

TContainer<T> = class
private
  FValue: T;
public
  constructor Create(aValue: T);
end;

constructor TContainer<T>.Create(aValue: T);
begin
  FValue := aValue;
end;

我可以使用如下:

var o: TContainer<TButton>;
begin
  o := TContainer<TButton>.Create(Button1);
  ShowMessage(o.ClassName);
end;

接下来,我定义一个工厂方法来创建一个基于仲裁对象类的类型的TContainer实例:

function CreateContainer(o: TObject): TObject;
begin
  Result := TContainer<o.ClassType>.Create;   // Fail: Undeclared identifier: 'TContainer'
end;

并调用:

procedure TForm1.SomeEvent(Sender: TObject);
var o: TObject;
begin
  o := CreateContainer(Sender);
  ShowMessage(o.ClassName);
end;

我的问题是如何实现function CreateContainer(o: TObject): TObject返回属性TContainer<T>实例?

0 个答案:

没有答案