Delphi 的RTTI机制浅探分析和总结.docx

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

问题:Delphi的RTTI机制浅探(积分:100,回复:21,阅读:352)

分类:ObjectPascal(版主:menxin,cAkk)

来自:savetime,时间:2004-1-210:48:00,ID:2420610Delphi的RTTI机制浅探

savetime2k@2004.1.20

目录

===============================================================================

RTTI简介

类(class)和VMT的关系

类(class)、类的类(classofclass)、类变量(classvariable)的关系

TObject.ClassType和TObject.ClassInfo

is和as运算符的原理

TTypeInfo–RTTI信息的结构

获取类(class)的属性(property)信息

获取方法(method)的类型信息

获取有序类型(ordinal)、集合(set)类型的RTTI信息

获取其它数据类型的RTTI信息

===============================================================================

本文排版格式为:

正文由窗口自动换行;所有代码以80字符为边界;中英文字符以空格符分隔。

(作者保留对本文的所有权利,未经作者同意请勿在在任何公共媒体转载。)

正文

===============================================================================

RTTI简介

===============================================================================

[显示:小字体|大字体]

RTTI(Run-TimeTypeInformation)翻译过来的名称是“运行期类型信息”,也就是说可以在运行期获得数据类型或类(class)的信息。这个RTTI到底有什么用处,我现在也说不清楚。我是在阅读Delphi持续机制的代码中发现了很多RTTI的运用,只好先把RTTI学习一遍。下面是我的学习笔记。如果你发现了错误请告诉我。谢谢!

Delphi的RTTI主要分为类(class)的RTTI和一般数据类型的RTTI,下面从类(class)开始。

===============================================================================

类(class)和VMT的关系

===============================================================================

一个类(class),从编译器的角度来看就是一个指向VMT的指针(在后文用VMTptr表示)。在类的VMTptr的负地址方向存储了一些类信息的指针,这些指针的值和指

针所指的内容在编译后就确定了。比如VMTptr-44的内容是指向类名称(ClassName)的指针。不过一般不使用数值来访问这些类信息,而是通过System.pas中定义的以vmt开头的常量,如vtmClassName、vmtParent等来访问。

类的方法有两种:对象级别的方法和类级别的方法。两者的Self指针意义是不同的。在对象级别的方法中Self指向对象地址空间,因此可以用它来访问对象的成员函数;在类级别的方法中Self指向类的VMT,因此只能用它来访问VMT信息,而不能访问对象的成员字段。

===============================================================================

类(class)、类的类(classofclass)、类变量(classvariable)的关系

===============================================================================

上面说到类(class)就是VMTptr。在Delphi中还可以用classof关键字定义类的类,并且可以使用类的类定义类变量。从语法上理解这三者的关键并不难,把类当成普通的数据类型来考虑就可以了。在编译器级别上表现如何呢?

为了简化讨论,我们使用TObject、

文档评论(0)

dqy118 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体上海海滋实业有限公司
IP属地上海
统一社会信用代码/组织机构代码
91310115MA7DL1JF2N

1亿VIP精品文档

相关文档