用一个过程如何释放不同的类,比如:
AClass = class(TObject)
BClass = class(TObject)我现在想用一个过程释放这两个不同的类,不能用IS语句,因为类是未知的
采用过一个方法,但无法使用TClass :TClassTClass := AClass.ClassType
TClass.free但是TClass没有Free方法

解决方案 »

  1.   

    那是不行了,根本在TCLASS中不提供这种方式的调用
      

  2.   

    最简单的方法是,自己从TObject继承下来写一个Tbaseclass,你要用的两个类就要从TBaseClass继承。如:
    TBaseClass = Class
      public FreeSelf; virtual;
    end;TAClass = Class(TBaseClass)
      public FreeSelf; override;
    end;TBClass = Class(TBaseClass)
      public FreeSelf; override;
    end;在你的过程中就可以使用TBaseClass了,调用FreeSelf方法就可以了。
      

  3.   

    这样不行,我试过啦,不然的话,用Destroy也就行啦
    由于TCLASS为一个类的对象,只支持类过程,但实现类过程时也无法调用Free这样的抽象过程或者重载过程
      

  4.   

    由于TCLASS为一个类的对象,只支持类过程,?????????
                       ~~~~~~       ~~~~~~~ 
    类方法无法用对象的东东!!!还是不明白楼主的意思。
      

  5.   

    TClass := AClass.ClassType
    这样写好象不对,ClassType方法只能有实例调用吧。
    如果要释放可以转化为TObject对象释放。
      

  6.   

    那样不行啊
    如果我继承自TObject的类AObject,用TObject.free释放恐怕不行吧!
      

  7.   

    TObject(对象).Free;//转化成TObject对象
    释放是释放一个类的实例。类怎么能释放呢?
      

  8.   

    有点搞不清楚楼主到底想干什么了,按我的理解这样做就可以的TMyClass = class of TObject;TAClass = class(TObject);
    TBClass = class(TObject);procedure DOSomething(MM: TMyClass);
    begin
      //使用TMyClass做你想做的事情,最终释放的就是你传递进来的实际对象。
    end;调用的时候: DoSomething(AClass);
                DoSomething(BClass);
      

  9.   

    是这样的,但是你还是没法释放TMyclass的对象啊
    关键就是你那个注释要写的东西没法定比如把你那个注释改成: MM.Free  
    那么肯定是不符合语法的!
    所以没法释放
      

  10.   

    type
      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;