对TObject.ClassType的实现的困惑 function TObject.ClassType: TClass;begin Pointer(Result) := PPointer(Self)^;//这里为什么不直接写成Result:=Selfend; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为self的类型是对象(TObject),也就是类(TClass)的实例(instance),而不是一个类(TClass) 不能用Result := Self, 为什么呢?你想想看,Self是指向对象实例的地址,如果有多个对象实例的话,那他们的ClassType岂不是不一样了?最重要的一点,要了解对象实例的内存布局,比如:TPerson = classprivate fName: string;end;var bob: TPerson;对象实例(bob)的内存布局:-----------------Class Reference <---Self指针指向的是对象内存实例,其开始处是类引用的指针。-----------------fName-----------------所以,计算对象的类型指针要用(关键是后面):Pointer(Result) := PPointer(Self)^; 还是不太理解,按ZuoBaoquan所说,PPointer(Self)^就能指向正确的classtype了? 有函数可以在创建文件夹的同时创建其子文件夹吗? Jet 的 OLE DB 访问 Excel 电子表格的问题 TTable 控件filter属性的设置问题———————在线等待!!!!! 谁有FastReport 2.5的注册码?急!!!!在线等待!!! DELPHI调用VC写的动态链接库问题 从中英文混排的字符串中去掉字符时,该如何进行 怎么能知道一个表是否为空? 谁可以提供一份详细的《软件需求规约》的sample 菜鸟的烦恼!如何转换real到integer; 求解关于Pos函数的奇怪问题 delphi ADOQuery的什么sql函数,可能代替Access中的replace 数值类型转换
private
fName: string;
end;var
bob: TPerson;对象实例(bob)的内存布局:
-----------------
Class Reference <---Self指针指向的是对象内存实例,其开始处是类引用的指针。
-----------------
fName
-----------------所以,计算对象的类型指针要用(关键是后面):
Pointer(Result) := PPointer(Self)^;