一个exe执行以后TObject存在于内存中吗(或着是任何其他类)????(注意不是实例对象,而是类)
如果存在是以一种什么形式存在????var
  Obj: TButton;
begin
  Obj := TButton.Create(XXX);
  if Obj = TObject then XXXXXX               <---------------- 配型不匹配
  if Pointer(Obj) = TObject then XXXXXXXX    <---------------- PASS     <---------------- 语句的含义是什么????
  Obj.Free;
end;

解决方案 »

  1.   

    问题并不难,但需要有足够的VCL研究功底只说一点点浅见:首先要说,可执行文件一般都是机器码,但我们如果仍要用“面向对象”的思维去审视它,那么可以肯定地说:Delphi是一定要把Application需要的类信息编译到EXE文件里,并在程序运行后占有内存空间(在代码区)的。
    然后要说,对于“TObject”来说,它有一个“表格”,叫做“Virtual Method Table”,保存了它所有的方法在代码区的地址。无论TObject有多少个实例,这些实例在执行TObject的方法时,都要转向这里。如果一个类TObj是TObject的派生类,它也有自己的VMT,但凡是TObj覆写了TObject类方法的方法,使用这些方法时,都要先寻找或后寻找TObject的VMT运行(视inherited位置而定)。
    这是“方法”。而类的字段、属性等,却是保存在实例内存中。就说这些,理解能力有限。
    然后听课。
      

  2.   

        类是数据与方法的结合体,一个类只要已经连接到程序中(什么方式连接的,这里不讨论),即使没有建立实例对象,它的方法也是以二进制形式存在的,当建立一个实例对象时,只是分配了该类的数据空间,方法地址是不变的。也就是说,代码编译连接后,类的方法和数据是分离的,类拥有方法地址,对象拥有数据。
        TObject是VCL的祖先类,只要使用了VCL,或者只要定义了class,它的各种方法肯定是包含在程序中的,即使TObject本身没有数据字段,也不能直接建立其对象。