题
我想实例化一个类,但我只有在一个字符串有其名。有没有办法?
解决方案
这是从Delphi的帮助(Delphi 2006中,但也从可用的至少Delphi 7中):
<强>语法强> 功能的getclass(常量AClassName:字符串):TPersistentClass;
<强>描述强> 打电话的getclass从类名获得类。这个类可以作为参数传递给需要的一类程序。类必须是注册前的getclass可以找到它。被加载的形式时被的形式声明(实例变量)引用的表单类和分量的类自动注册。其它类可以通过调用的RegisterClass或RegisterClasses注册。
下面一些示例代码。可以作为这样不仅因为TButton的是一个的TControl,因此类型转换是有效的。
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterClasses([TButton, TForm]);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
CRef : TPersistentClass;
AControl : TControl;
begin
CRef := GetClass('TButton');
if CRef<>nil then
begin
AControl := TControl(TControlClass(CRef).Create(Self));
with AControl do
begin
Parent := Self;
Width := 50;
Height := 30;
end;
end;
end;
其他提示
当我需要做的是,我建立一个使用专门的子类的TStringList,我目前使用的Delphi 7这样的字符串列表类支持对象只连接到一个字符串我自己的对象工厂,然后我得到了子类的TStringList使人们有可能手柄类的类型太多,所以现在我可以实例化一个对象只是路过它的类名工厂。这样工作:
第一 - 加载一个Singleton对象工厂;结果 2ST - 注册的任意对象的工厂,可以在该单元的初始化部分;
在主厂的方法可以是:isClassRegistered,的registerClass,instantiateClass(类名:字符串):TObject的;
此方式可以实例化的任何对象,或者使用之前的实例化的对象,甚至是,它们的子集。
我宁愿使用,而不是一个串的枚举类型来标识一类。
备注:这是一个非常,非常简洁例如,一个完全功能的代码更复杂,但是,我相信的,没有太多
不隶属于 StackOverflow