Delphi的接口,据说是很牛X的东西,总体感觉来说,没有想象的那么好。很多Delphi相关的很牛的技术都没有用过。

好吧,其实自己了解也并不多,更不用说很深层次的东西了,讲一讲自己经历的痛苦中得出来的一些东西吧。

1. 同一个对象的一种接口的地址都是一样的。

这个当初我也是很迷茫,在网上找了不少的资料,书上也基本没有说。说白了就是接口的内存空间的问题,接口的内存空间是在声明接口的时候分配的吗,Delphi接口有自己的内存空间吗。其实Delphi的内存空间是依附着对象,其实按道理上来讲也确实是这样的。但一般的情况是,把一个对象赋给一个接口之后,这个对象一般是不会自己去释放的,这个对象的的生命的结束就是这个接口来管理了。

所以在改Bug的过程中,经常做的一件事情就是验证接口的地址是否一致,如果不一致的话,肯定是有问题的。

2. 接口强转

接口强转有很多办法,例如,support,as,还有直接进行类型转换。但是很多都是有隐患的,只有通过support的返回值判断是否支持才是足够安全的。所以如果没有确切的把握一般不要用其它的办法,还是用support吧。现在我越来越觉得,很有必要这样做,这样不管以后的变动,影响都是最小的。

而且我还遇到一个很销魂的问题,用support转换之后,返回已经成功转换了,但是接口的地址还是没有变。这似乎是有违规律的,后来才发现,这个接口早就已经有问题了,在前面已经进行了不合法的强转,这样就没有办法了,就会产生莫名其妙的问题。

3. 一种比较麻烦的接口存储

如果存储大量的接口的话,用List肯定访问起来有时候是不够方便的,可能会想到用Hash,这就会造成一些问题,可能存储的时候就需要转换为数值或其它的,而不是以接口的形式存在了,然后在取出的时候转回来。取出来的时候肯定要进行类型强转,但已经没有了类型的信息,所以是很不安全的。

所以必须确保,存进去和取出来的接口是一致的,取出来之后可以再进行其它的操作。

4. 转换的原理

说句实话,我也不是很懂。在网上看到了一些相关的试验性的代码,在对象的存储空间里有指针指向一个接口表,其实类型的转换都是靠这个表来实现的,就是接口查询,经常容易看到这个函数。

BTW: 居然在网上看到一篇韩小明的写的从接口里获得对象的文章,不知是不是真的这个人。 好吧,Delphi的对象确实不是一般。

delphi的接口support_学习到的关于Delphi的接口相关推荐

  1. delphi接口基本学习摘录

    delphi接口基本学习摘录 声明接口         IMyInterface = interface(IInterface)           ['{63E072DF-B81E-4734-B3C ...

  2. delphi 注册列表的学习

    Delphi的注册表操作 32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息. 一.创建和释放TRegistry对象  1.创建TRegistry对象.为了操作注册表,要创建 ...

  3. TS基础1(类型定义、接口)-学习笔记

    文章目录 TS基础1(类型定义.接口)-学习笔记 什么是TS TS基础1(类型定义.接口)-学习笔记 什么是TS //ts用法var n:number = 10;let str:string = '1 ...

  4. delphi windows编程_学习C/C++:伴随我成长的编程书!

    学习C++是一个艰难的过程.如果从我第一次看C++的书算起,现在已经过了11年了.一开始的动机也是很不靠谱的.刚开始我很喜欢用VB6来开发游戏,但是我能找到的资料都是用C++来做例子的,文字部分又不丰 ...

  5. JAVA学习笔记(第五章 接口与继承)

    一.什么是接口 接口就像是一种模板,接口中放着没有内容的方法,类要是使用接口就必须声明接口中的方法.下面继续以LOL游戏为例: LOL的英雄,有些能够使用物理攻击,有些能够使用魔法攻击击,有些则两种攻 ...

  6. python测试自动化封装_python接口自动化学习笔记(封装获取测试数据方法)

    本篇文章是接于python接口自动化学习笔记(封装方法用于读取excel) 后的拓展,讲解在封装完成excel的数据读取代码后,如何在data层进行使用 首先,我准备了这样一个excel表格用以存储测 ...

  7. 学习笔记——day09(抽象final接口)

    常见面试题 final修饰静态常量进过方法 final 修饰的基本数据类型变量的值 无法进行修改的 final 修饰的引用类型的变量 只保证地址不变 对象中的内容可以发生改变 代码 public cl ...

  8. VUI-百度语音之Rest接口python学习笔记0

    百度语音支持Rest接口,支持http接口,在一些嵌入式处理器平台上,如Cortex-M系列处理,可以发挥不错的效果. 文档接口如下: http://ai.baidu.com/docs#/ASR-AP ...

  9. 百度AI学习第一天_调用API接口通用步骤

    百度AI学习第一天_调用API接口通用步骤 #第一步获取access_token # client_id 为官网获取的AK, client_secret 为官网获取的SK host = 'https: ...

最新文章

  1. VIT自适应语音转文本可预测长度和内容(ocr也可)
  2. mysql报错:This version of MySQL doesn’t yet support ‘LIMIT IN/ALL/ANY/SOME 解决方法
  3. 架构设计的目标与衡量
  4. BZOJ 2049: [Sdoi2008]Cave 洞穴勘测
  5. ASA SSL ××× Anyconnect SBL(Start Before Logon)用于在外网登录域(上)
  6. Linux下查看系统配置
  7. calendar前推n天_Shell获取ES3天的索引列表进行迁移操作
  8. 首个windowsForm应用项目 1123
  9. AndroidUI高级之十六使用Intent进行通信
  10. 研0必读!李航《统计学习方法》啃书指南
  11. mysql 主从的几个参数
  12. LeetCode每周刷题(2019.7.1-2019.7.7)
  13. 后台管理系统 – 权限管理
  14. 中国象棋详细设计分析
  15. u盘在 计算机管理显示无媒体,urdrive_u盘显示无媒体怎么办_启动盘
  16. 计算机基础实践教程world,实验16+计算机基础实验报告.docx
  17. Win7下安装Windows SDK
  18. 用计算机为题目写作400字,以电脑为话题的作文
  19. JetBrain学生认证续费步骤
  20. 转换xml格式的短信记录

热门文章

  1. SQL实战篇:SQL基础及执行顺序
  2. python3爬虫初探(三)之正则表达式
  3. Couldn't find leader offsets for Set([smt,0], [smt,1], [smt,2])
  4. RDD的几种创建方式
  5. java Concurrent包学习笔记(一):ExecutorService
  6. 2018.11.16 长难句4
  7. Java3y文章目录导航
  8. 第148天:js+rem动态计算font-size的大小,适配各种手机设备
  9. Spark Streaming的窗口操作
  10. 算法分析-分治 归并排序,递归插入排序,二分查找