100求助高手,动态类实例生成的问题(分不够可以再开贴)
希望能通过传入类名参数或者类参考实例也好,反正在函数中能够生成对应的类实例。老是显示抽象类错误,快郁闷死了。。。。。能有classforname该多好啊(该死的DELPHI)。
有什么好的办法
代码如下:
-------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
list: TList;
{ Private declarations }
public
{ Public declarations }
end;
C_BASE = class(TObject)
public
constructor create; virtual; abstract;
procedure doit; virtual; abstract;
end;
classC = class of C_BASE;
C_A = class(C_BASE)
private
ii: Integer;
public
aa: string;
a0: string;
constructor create; overload;
procedure doit; override;
end;
classA = class of C_A;
C_B = class(C_BASE)
public
bb: string;
constructor create; overload;
procedure doit; override;
end;
classB = class of C_B;
procesBASE = procedure (any: C_BASE);
var
Form1: TForm1;
implementation
{$R *.dfm}
constructor C_A.create;
begin
Self.aa := 'iamaa';
Self.ii := 555;
Self.a0 := 'nbads';
end;
procedure C_A.doit;
begin
ShowMessage(Self.aa);
ShowMessage(Self.a0);
end;
constructor C_B.create;
begin
self.bb := 'bbii';
end;
procedure C_B.doit;
begin
ShowMessage(self.bb);
end;
procedure doany(var any: C_BASE; cls: classC);
var
innerbase: C_BASE;
begin
innerbase := any.create;
ShowMessage(innerbase.ClassName);
//<<<<<<<<<<<<<<<<<<<<<<<怎样在这里产生一个C_BASE子类实例啊?????
//cls.InstanceSize
any.doit;
end;
/////////////////////////////////////////////////////////////
procedure TForm1.Button1Click(Sender: TObject);
var
ca: C_A;
cb: C_BASE;
cla: classA;
clb: classB;
clc: classC;
begin
ca := C_A.create;
clc := clb;
doany(C_BASE(ca), clc);
ca.Free;
// cb := C_BASE.create;
// doany(cb, clb);
// cb.Free;
//
// ca := cb;
end;
end.