急!能不能根据字符串创建对象??就像java的Class.forName("xxx")那样??(100分)

  • 主题发起人 主题发起人 budianermayi
  • 开始时间 开始时间
B

budianermayi

Unregistered / Unconfirmed
GUEST, unregistred user!
我想通过一个类的名字(字符串)创建一个类的对象,能在Delphi实现吗?就像java中的
Class.forName("objectName" )那样?通过字符串得到一个类的指针,然后newInstance()
就可以得到对象了,delphi行吗???
是不是非要使用COM???不用能实现吗?
 
这问题需要使用RTTI(运行时类型信息来处理),查一下FindComponent,你会查到一大堆
关于此问题解决方法的贴子。
 
多谢Sachow大侠!
不过,如果我想find 的类并不是Component类型的呢?怎么办呢?而且,FindComponent
只能找到当前已经存在的对象啊!
 
请问怎么实现?
 
你是要创建已经注册的类的对象,用FindClass,然后创建
 
楼上说的
 
前提是你的对象的类要先注册。例如:
TForm2 = class(TForm)
...
RegisterClass(TForm2)
// 这样

然后可以这样:
type
TFormClass = class of TForm;

MyForm := TFormClass(GetClass('TForm2')).Create(Application);

 
C++Builder中就用__ClassID(String)
 
FindClass.
你查一下动态加载包,就能找到一大堆根据类名创建对象的例子
 
呵呵,FindClass 也是调用的 GetClass,如果指定类找不到的话
FindClass 返回 nil,而 GetClass 则引发异常。

 
还有疑问?好想各位说的只限于Form或者component类型的类,是吗?如果我想要创建别的类呢
?比如说能不能直接创建从TObject派生出来的类????
 
最简单的方法就是通过Case语句对比输入的字符串来创建相应的类
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部