function TObject.ClassType: TClass;
begin
  Pointer(Result) := PPointer(Self)^;//这里为什么不直接写成Result:=Self
end;

解决方案 »

  1.   

    因为self的类型是对象(TObject),也就是类(TClass)的实例(instance),而不是一个类(TClass)
      

  2.   

    不能用Result := Self, 为什么呢?你想想看,Self是指向对象实例的地址,如果有多个对象实例的话,那他们的ClassType岂不是不一样了?最重要的一点,要了解对象实例的内存布局,比如:TPerson = class
    private
      fName: string;
    end;var
      bob: TPerson;对象实例(bob)的内存布局:
    -----------------
    Class Reference      <---Self指针指向的是对象内存实例,其开始处是类引用的指针。
    -----------------
    fName
    -----------------所以,计算对象的类型指针要用(关键是后面):
    Pointer(Result) := PPointer(Self)^;
      

  3.   

    还是不太理解,按ZuoBaoquan所说,PPointer(Self)^就能指向正确的classtype了?