请问怎样把字符串转化为一个类?(0分)

  • 主题发起人 主题发起人 forgot2002
  • 开始时间 开始时间
哦,程云,我现在觉得你的构想可能不这么容易实现,dcc32.exe在编译时要链接一些引用
的系统单元,如system.pas(或它的dcu),如果要实现你的构想,就要把这些文件都带上,
可能还有其他很多文件。 :)
 
这个问题我觉得要涉及到DELPHI对类的RTTI信息管理的问题。

简单的来说,如果要通过类的名字得到类,那么必须要知道这个类的RTTI信息。(大家不会不知道RTTI吧?)
我们都知道DELPHI是单根继承,所有的类都是从TObject类继承下来的,而TObject类有几个类方法(Class Methord),
可以得到类的名字等信息,这些东西是依赖这个类的RTTI的得到的。在Delphi中,所有以知类的RTTI信息都是保存在
一个列表(List)中,FindComponent就是这个列表中通过所记录的类的RTTI查找类的名字得到对应的类的。
DELPHI3本身会对自己的标准类登记他们的RTTI,但是如果是你自己定义的类的话,DELPHI是不知道的。
所以要通过RegisteClass来注册你自己的类,将你自己的类的RTTI加入上面所说的那个列表中。只有这样
FindComponent才能够找到。

楼上有一个老兄说JAVA可以通过类名得到类,那只不过是JAVA将所有的类在编译的时候都注册了而已,而这样
是很浪费资源的。

试想,你的类没有实例话的时候,哪里来的RTTI?你让编译器到那里去找这个类的信息呢?



 
另外说一句,其实DELPHI也并不是把所有它自己的标准类都注册了,例如TMemu就没有注册过。
 
你可以用FindClass函数,这个函数的声明是这样的:
function FindClass(const ClassName: string): TPersistentClass;
它返回的是一个类的引用(class of).刚好可以作为你的函数的参数
Procedure Test1(AClass:TClass);
不过TPersistentClass的定义是class of TPersistent,所以只能用于从
TPersistent类继承的类(包括TPersistent)。

另外,你的问题怎么没有分数?

 
这个函数好像也是要用RegisterClass才能用吧?
 
如果是共享软件,则要从底层好好研究一个科学的方法。
如果是商业软件,先解决问题才是最重要的,
我会用两个一一对应的数组,临时去Case一下,就知道是什么类了。
当然,我事先已知道可能会用到的所有的类。
 
动态创建“任意类”实例的基础是:类的构造方法必须是虚拟的,所以现实一些是可以
考虑两个系列的类,其一就是TComponent及其派生类,其二是自定义的,建议从TPersistent
派生一个自定义的基类,构造方法为虚拟的,其它自定义类由此派生开来。
根据类名找类就使用FinfClass或GetClass,如楼上各位所述,需RegisterClasses,
不过TComponent家族的不用考虑,已经Register了,自定义的类必须用RegisterClass或
RegisterClasses注册。
创建的时候用FindClass找到类,测试一下是哪个系列的(若自定义类也从TComponent
派生,则不用了),调用相应的虚拟构造方法即可。

这个方案我从D1到D6一直在使用。
 
请参与这个问题讨论的各位朋友到
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1280760
随便说两句话,我好给分。
 
接受答案了.
 
强阿,这个帖子,虽然已经结了,我还要关注!
 

Similar threads

回复
0
查看
848
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部