讨论算法:如何Create一个类实例? (100)(100分)

  • 主题发起人 主题发起人 zensst
  • 开始时间 开始时间
Z

zensst

Unregistered / Unconfirmed
GUEST, unregistred user!
我打算生成一种方法,能够根据一个标志,如XType(integer),自动Create
一个类实例.如果是Delphi中定义的类,可以先RegisterClass,然后根据XType
的值来确定是调用哪个Class的Create方法;如果是自己定义的类,也可以如是
做;如果不是自己定义的,可以通过一种定义,比如通过一个TList,通过查找来
实现,Delphi就是这样.
例子:
PXTypeRec=^XTypeRec
XTypeRec=record
XType: Integer;
P: Pointer;
//@Create
end;
function RegisterXType(_XTypeRec: PXTypeRec): XType;
begin
{a TList add _XTypeRec}
{Result}
end;
function CreateWithXType(XType: Integer): TObject;
begin
{Search a TList to find the create function with XType}
{call XTypeCreate}
{Result}
end;

问题是,
如果Create带参数,怎么处理?
如果XType的值很多,即TList很大,如何提高效率?
如果不小心,将多个XTypeRec.XType定义为同一个值后,(而自己无法修
改,比如是其他人定义的,不能改代码)该怎样找到合适的方法(可以扩展
TypeRec的定义)?
 
总觉得怪怪的。
 
改用COM吧,只有GUID才能解决XType
 
的确,COM可以解决,但我总对COM的感觉不好。而且,当类型较多时,注册表中
放不下。
 
举一个例子,有很多画图的类,可以理解为从TShape继承下来;如果我事先知道
有哪些,那么我可以创建、使用、保存它们;但如果别人扩展了更多的类,而我不
知道,但我又要能够将它们保存下来,并且能够读出来。
问题是,如果用Delphi内建的SaveToStream和LoadFromStream方法,我怎么能
够创建类的实例,因为不同的实例的方法可能不一样(仔细体会一下),而我只能
知道用一个标志来区分它们,调用事先预定的Create方法。
上述方法能够实现,但有更好的方法吗?
 
我建议你使用类类型,关于类类型有很多的需要注意的地方,
我回去给你发一个文件吧,要不你自己看帮助也行,
 
lczhuohuo
我在等...
 
难道就没人回答了吗?
再问lczhuohuo,类类型是什么东西啊?
 
为什么我总是有很多事,为什么学校要搞大合唱,为什么要搞
网络大赛,为什么我现在不在寝室里,哥们,真是对不起,5。1前
我一定努力给你发,不过天知道还有什么事?
 
算了,没人回答了。
感谢lczhouhuo;给了一些启发。
 
后退
顶部