用一个过程如何释放不同的类,比如:
AClass = class(TObject)
BClass = class(TObject)我现在想用一个过程释放这两个不同的类,不能用IS语句,因为类是未知的
采用过一个方法,但无法使用TClass :TClassTClass := AClass.ClassType
TClass.free但是TClass没有Free方法
AClass = class(TObject)
BClass = class(TObject)我现在想用一个过程释放这两个不同的类,不能用IS语句,因为类是未知的
采用过一个方法,但无法使用TClass :TClassTClass := AClass.ClassType
TClass.free但是TClass没有Free方法
解决方案 »
- delphi 连接数据库 帮我解释这断程序是什么意思
- 请教了解C语言的朋友一些关于Delphi的简单的问题
- 关于DBGrid控件自动选择的问题??请高手指教!!!
- 高分求一个EXCEL快速导入ACCESS的模块
- StringGrid 与 DrawGrid 有何区别?
- ★★★★★★★★★★★★★★★★★★关于dxDBGrid实现分组汇总的问题???★★★★★★★★★★★★★★★★★
- 在delphi中使用msscript.ocx能举个例子吗?
- 如何在onmousemove事件里修改鼠标的光标,如何把光标属性改为字符以便显示?
- 那位老兄有售楼软件的软件方案(带图片),高分致谢!!分少了再加!谢谢
- SOS,....., 有关PageControl的问题?
- 请问怎样在程序中禁用Windows的各个热键?
- 动态库DLL高手请进!!
TBaseClass = Class
public FreeSelf; virtual;
end;TAClass = Class(TBaseClass)
public FreeSelf; override;
end;TBClass = Class(TBaseClass)
public FreeSelf; override;
end;在你的过程中就可以使用TBaseClass了,调用FreeSelf方法就可以了。
由于TCLASS为一个类的对象,只支持类过程,但实现类过程时也无法调用Free这样的抽象过程或者重载过程
~~~~~~ ~~~~~~~
类方法无法用对象的东东!!!还是不明白楼主的意思。
这样写好象不对,ClassType方法只能有实例调用吧。
如果要释放可以转化为TObject对象释放。
如果我继承自TObject的类AObject,用TObject.free释放恐怕不行吧!
释放是释放一个类的实例。类怎么能释放呢?
TBClass = class(TObject);procedure DOSomething(MM: TMyClass);
begin
//使用TMyClass做你想做的事情,最终释放的就是你传递进来的实际对象。
end;调用的时候: DoSomething(AClass);
DoSomething(BClass);
关键就是你那个注释要写的东西没法定比如把你那个注释改成: MM.Free
那么肯定是不符合语法的!
所以没法释放
TMyClass = Class of TControl; TAClass = class(TControl)
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end; TBClass = class(TControl)
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end; TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure DoDestroyClass(MM: TMyClass);
end;var
Form1: TForm1;implementation{$R *.dfm}{ TBClass }constructor TBClass.Create(AOwner: TComponent);
begin
ShowMessage('BBBB');
inherited;end;destructor TBClass.Destroy;
begin
ShowMessage('B Destroy');
inherited;
end;{ TAClass }constructor TAClass.Create(AOwner: TComponent);
begin
ShowMessage('cREATE');
inherited;end;destructor TAClass.Destroy;
begin
ShowMessage('A Destroy');
inherited;
end;{ TForm1 }procedure TForm1.DoDestroyClass(MM: TMyClass);
var
Tmp: TControl;
begin
Tmp := MM.Create(Self);
FreeAndNil(TMP);
//Tmp.Destroy;这样做也行,不过不如上面的安全。
end;procedure TForm1.Button1Click(Sender: TObject);
const
ClassArray: array[0..1] of TMyClass = (TAClass, TBClass);
begin
DoDestroyClass(ClassArray[0]);
DoDestroyClass(ClassArray[1]);
end;