电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

Delphi接口的底层实现

Delphi接口的底层实现_第1页
1/9
Delphi接口的底层实现_第2页
2/9
Delphi接口的底层实现_第3页
3/9
Delp hi 接口的底层实现 引言 接口是面向对象程序语言中一个很重要的元素,它被描述为一组服务的集合,对于客户端来说,我们关心的只是提供的服务,而不必关心服务是如何实现的;对于服务端的类来说,如果它想实现某种服务,实现与该服务相关的接口即可,它也不必与使用服务的客户端进行过多的交互。这种良好的设计方式已经受到很广泛的应用。 早在 Delphi 3 的时候就引入了接口的概念,当时完全是因为COM 的出现而诞生的,但经过这么多版本的进化,Delphi 的接口已经成为Object Pascal语言的一部分,我们完全可以用接口来完成我们的设计,而不用考虑与COM 相关的东西。 那么接口在 Delphi 中是如何实现的呢,很多人想得很复杂,其实它的本质不过也是一些简单的数据结构和调用规则。笔者假设读者已经有接口的使用经验,本文试图向你展示接口在 Delphi 中的实现过程,使你在使用接口的时候,知其然而知其所以然。 接口在内存中的分布 接口在概念上并不是一个实体,它需要与实现接口的类关联,如果脱离了这些类,接口就变得没有意义了。但接口在内存中仍然有其布局,它依附在对象的内存空间中。 Delphi 对象本质上是一个指向特定内存空间的指针,这块内存的前四个字节是一个指针指向类的VMT 表,接下来排布对象的数据成员,如果对象实现了接口,则在后面又排着一系列指针,我们可以认为这些指针就是对应的接口,每个指针就指向一个接口方法表。我们来看一下简单的例子: type ITest1 = interface ['{5347BB0D-89B7-4674-A991-5C527BE6F8A8}'] procedure SayHello1; end; ITest2 = interface ['{567B86BB-711D-40C2-8E5E-364B742C2FF1}'] procedure SayHello2; end; TTest = class(TInterfacedObject, ITest1, ITest2) public procedure SayHello1; procedure SayHello2; end; ... ... implementation { TTest } procedure TTest.SayHello1; begin showMessage(IntToStr(FRefCount)); ShowMessage('Itest1 say hello'); end; procedure TTest.SayHello2; begin ShowMessage(IntToStr(FRefCount)); ShowMessage('Itest2 say hello'); end; end. 上面是两个接口的声明以及一个实现接口的类,TTest 类在内存中的分布可以用下图来表示: 其中FRefCount 为父类TInterfacedObject 的一个成员,接下来存放的是TInterfacedObject 实现的接口IInterface,再下来分别是TTest 类...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

Delphi接口的底层实现

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部