已定义了很多类,想构造一个函数
function NewClass(AClassName:string):TObject;
功能:输入类名创建类对象,返回创建的类对象;
要求:不用Case语句(因有很多类);能实现吗?要用类模板吗?(VC有此功能,Delphi怎么做?)
function NewClass(AClassName:string):TObject;
功能:输入类名创建类对象,返回创建的类对象;
要求:不用Case语句(因有很多类);能实现吗?要用类模板吗?(VC有此功能,Delphi怎么做?)
解决方案 »
- 请教一个有关EnumWindows回调函数的问题
- DBGrid在dgAlwaysShowEditor下繪製日期控件異常問題
- Excel.Application不能打开Excel?
- 为什么窗口的句柄会改变?
- 也谈VCL中DragDrop功能的底层实现
- 注册不上F12热键的问题!急!求救!
- memo的问题
- 装了CB之后,Delphi中的XML组建坏了~~怎么办啊
- 菜单的快捷键的问题!很简单!
- 帮忙看看这段程序那里错了?????????????????????????
- ★★forgot2000求助:妹妹快毕业了,要参加招聘会,请问“广州中山大学南校区英东田径场”在什么地方?★★
- 为什么用GetWindowText不能获取得文本框的内容
1. TTestClass = class of TControl;
TTestA = class(TControl)
public
constructor Create(AOwner: TComponent); override;
Destructor Destroy; override;
end;
TTestB = class(TControl)
public
constructor Create(AOwner: TComponent); override;
Destructor Destroy; override;
end;使用:
function CreateObject(Test: TTestClass): TControl;
var
Tmp: TControl;
begin
Tmp := Test.Create(nil);
Result := Tmp;
end;2.先定义一个所有类的基类的类引用(如CClass: Class of BaseClass),就必须在你写完每一个类后要RegisterClasses,然后:
function NewClass(AClassName: string): TObject;
var
C :CClass
SomeObject: TObject;
begin
C := CClass(FindClass(AClassName));
SomeObject := C.Create(nil);
Result := SomeObject;
end;
===================
RegisterClasses,FindClass,只能用这个了,但是其实它底层也只是遍历所有注册了的class,就效率而言,它也许还不如case,只是可以做到动态添加类而已。