- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
DELPHI
DELPHI中使用RTTI
运行期类型信息(RTTI)是一种语言特征,能使应用程序在运行时得到关于对象的信息。RTTI
是Delphi的组件能够融合到IDE中的关键。它在IDE中不仅仅是一个纯学术的过程。
由于对象都是从TObject继承下来的,因此,对象都包含一个指向它们的RTTI的指针以及
几个内建的方法。下面的表列出了TObject的一些方法,用这些方法能获得某个对象实例的信息。
函数
函数
返回类型
返回值
ClassName()
string
对象的类名
ClassType()
boolean
对象的类型
InheritsFrom
boolean
判断对象是否继承于一个指定的类
ClassParent()
TClass
对象的祖先类型
Instancesize()
word
对象实例的长度(字节数)
ClassInfo()
Pointer
指向RTTI的指针
第一部分:关于
第一部分:关于as 和is
ObjectPascal提供了两个运算符as和is,用它们通过RTTI能对对象进行比较和强制类型转
换。
关键字as是类型转换的一种新的形式。它能把一个基层的对象强制类型转换成它的派生类,
如果转换不合法就产生一个异常。假定有一个过程,想让它能够传递任何类型的对象,它应该这
样定义:
ProcedureFoo(AnObject:Tobject);
在这个过程如果要对AnObject进行操作,要把它转换为一个派生对象。假定把AnObject看
成是一个TEdit派生类型,并想要改变它所包含的文本,用下列代码: (AnObjectas
Tedit).text:=wudi_1982;
能用比较运算符来判断两个对象是否是相兼容的类型,用is运算符把一个未知的对象和一个已知类型或实例进行比较,确定这个未知对象的属性和行为。例如,在对(AnObject进行强制类型转换前,确定(AnObject和TEdit是否指针兼容:
if(AnObjectisTedit)thenTedit(AnObjject).text:=wudi_1982;
注意在这个例子中不要再使用as进行强制类型转换,这是因为它要大量使用RTTI,另外还
因为,在第一行已经判断Foo就是TEdit,可以通过在第2行进行指针转换来优化。
这两个操作符最典型的应用我想应该是在程序需要的部分清空窗体上所有edit的text属性
procedureTForm1.ClearEdit(Acontrl:TWinControl);var
i:integer;begin
fori:=0toAcontrl.ControlCount-1dobegin
ifAcontrl.Controls[i]isTEditthen((Acontrl.Controls[i])asTEdit).Text:=;
ifAcontrl.Controls[i]isTCustomControlthenClearEdit((Acontrl.Controls[i]asTCustomControl))
end;end;
第二部分:RTTI
上文中已经多次提到了RTTI,但好像并没有看到RTTI出现。那么RTTI是如何表现自己的
呢?你将发现,RTTI至少在两个地方对你有用。第一个地方是DELPHI的IDE,这在前面已提到过。通过RTTI,IDE就会知道你正在使用的对象和组件的任何事情。实际上,不只是RTTI,但为了这个讨论,我们只谈RTTI方面。其实上面的as,is操作都间接的使用了RTTI。
还是用个例子来演示吧。在观看此例子之时,建议你看看typinfo.pas中的内容(DELPHI安
装目录下\source\rtl\common\TypInfo.pas);
下面的例子主要分为两部分,界面上半部分,主要演示通过rtti来显示用户选择类型的信息。
(有3个TListBox)。
下面的部分主要通过RTTI来完成通过配置信息对控件进行属性的赋值操作,这里将演示文本类型和事件类型的赋值。
窗体文件如下:代码如下:
objectForm1:TForm1Left=150
Top=161
Width=639
Height=372Caption=Form1Color=clBtnFace
Font.Charset=DEFAULT_CHARSETFont.Color=clWindowTextFont.Height=-11
Font.
文档评论(0)