我定义了一个泛型类:
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>
实例?