文档章节

Delphi 的接口(1) - 前言

涂孟超
 涂孟超
发布于 2014/09/26 15:33
字数 934
阅读 10
收藏 0

之前, 有朋友夸过我: 博文通俗易懂, 能把复杂的问题简单化;
希望我对接口的理解也能对大家有所帮助; 不过其中个人理解的成分多些, 错误之处万望指出.

"接口" 的概念和 "类" 特别是 "抽象类" 近似, Delphi 之初并没有接口, 后来(Delphi 3)为了支持 COM 引入了接口, 再后来发展成为 Delphi 重要的语言特性.

应该先简单了解点 COM, 说到 COM, 能让我想到 "有心栽花花不活, 无意插柳柳成荫" 的古话.
微软在开发 OLE 时, 有一种需求: 使用其他程序中的对象, 这种需求导致了 COM 的诞生并发扬光大, 而 OLE 却在慢慢地销声匿迹.

从 COM 到 COM+, 之后好像微软并没有再大力发展(可能是把精力都放到 Net 上去了, 但 Net 也没离开 COM), 它现在仍有着非常广泛的应用, 这应该得益于它先进的思想.

慢慢道来:
1、一个二进制的 1 或 0, 这是任何语言都可以识别的;
2、一个字符, 也是任何语言都可以识别的;
3、一个整形变量, 也是任何语言都可以识别的;
4、一个结构体, 也是任何语言都可以识别的;
5、一个函数也没有问题, 譬如 Delphi 调用 API;
6、但一个 "对象" 或着 "类" 呢? 这在跨程序、跨语言时就不好识别了.

COM 解决了这个问题! 并进而应用于网络.

COM 规定了一个二进制的标准, 这个标准主要针对 "对象方法的声明"(也就是接口), 同时把声明(接口)和实现分开.
不同的语言都可以来实现这个接口、同时不同的语言(在遵循标准的情况下)也都能识别这个接口, 从而实现的跨语言的对象的交互.

现在看看这个过程其实是水到渠成、挺自然的; 但好像当初微软的 COM 之路也并不平坦.

微软通过 COM 组件的方式提供了很多功能, 它们很可能是用 C++ 实现的, 我们用 Delphi 可以很好的使用, 本质上说就是 Delphi 遵循了那个二进制的标准; 相反, Delphi 按这个标准声明、并用自己的语言实现的 COM 组件也能供其他语言使用.

一个 COM 组件里有什么呢?
主要是一堆接口(也就是声明)和接口的实现, 每个接口对应一个计数器, 另包含一个叫 "类厂" 的东西.
使用 COM 步骤可能是这样的:
1、程序在使用组件之初, 先联系 "接口"; 这应该是从注册表中查询.
2、找到后, 如果此接口还没有被实现, 马上调用 "类厂" 建立起对象, 并同时给接口计数器加 1.
3、可能会不止一个程序在使用同一个接口, 但每有使用则 "计数器+1", 每次用完则 "计数器-1".
4、当接口的使用计数为 0 时, 系统自动释放类厂为该接口建立的对象(垃圾回收机制).

我们 Delphi 中的接口当然也是这样, 用完会自动释放, 无需手动 free.

接口在 Delphi 中继续支持着 COM 并继续完善着, 接下来要讨论的是作为语言特性的 "接口" 概念与使用.
我曾经被 "接口" 置于云雾之中, 一些书也让人越看越糊涂; 明白了以后发现其实挺简单的, 相比 "类" 的规则要简单许多.

本文转载自:http://www.cnblogs.com/del/archive/2009/06/04/1496214.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
集成开发环境--Delphi

Delphi,是美国Borland(宝兰)公司於1995年开发在Windows平台下的快速应用程式开发工具(Rapid Application Development,简称RAD),它的前身是在DOS下的产品Borland Turbo Pascal。(非开源...

匿名
2009/03/11
21K
1
Delphi的网友评论

Delphi,是美国Borland(宝兰)公司於1995年开发在Windows平台下的快速应用程式开发工具(Rapid Application Development,简称RAD),它的前身是在DOS下的产品Borland Turbo Pascal。(非开源...

红薯
2009/12/11
552
7
Delphi调用 C# 写的webservice

Delphi调用 C# webservice总结 用delphi的THTTPRIO控件调用了c#写的webservice。 下面是我调试时遇到的一些问题: 1:导入wsdl文件:file--new----other----webservice---WSDLimporter---输入...

vga
2014/11/25
0
0
delphi开发activex控件的心得

delphi开发activex控件 2009-01-12 12:18:01| 分类: delphi | 标签: |举报 |字号大中小 订阅 用Delphi开发OCX的心得 最近在做的一个B/S系统要在客户端读取USB锁的要求,所以就需要写一个O...

vga
2014/02/27
0
0
C语言封装的sdk,转DELPHI中调用开发

阿里云物联网SDK套件是C语言封装的,而当前使用平台是delphi语言开发,现需要使用delphi语言实现一个demo,其中来调用此sdk套件的相关接口。(只要实现 跟\examples\windows\mqtt\demo.c 一样...

whereno
2016/09/07
6
3

没有更多内容

加载失败,请刷新页面

加载更多

如何利用 Data too long for column 进行一些简单的攻击

1: 前提条件, 后台没有校验长度和频率校验,也没有CSRF校验,直接往数据库插入数据,此时很容易触发Data too long for column错误(一般抛出异常都挺浪费资源的,耗时,耗内存,耗cpu),一旦...

专业写BUG的程序员
16分钟前
1
0
RMAN命令详解

一、list命令 1. List 当前RMAN所备份的数据库: 1.1. list backup summary; --概述可用的备份 list incarnation;--汇总查询 --如果备份文件多的话多用这两个list命令可以对备份文件有个总体...

突突突酱
20分钟前
0
0
简单聊聊Linux学习经历

学习,是我们一生中都规避不了的一个话题,人的一生中都是在不断的学习,无论是功成名就的人士,还是一无是处的小混混,始终都处在一个不断学习的环境中,只是学习的内容千差万别,有的人是为...

问题终结者
27分钟前
0
0
Mysql高级 (2)——sql性能调优

sql 性能下降的原因 sql service的解析顺序 sql 的7中join

小小小施爷
32分钟前
0
0
MaxCompute用户初体验

作为一名初次使用MaxCompute的用户,我体会颇深。MaxCompute 开箱即用,拥有集成化的操作界面,你不必关心集群搭建、配置和运维工作。仅需简单的点击鼠标,几步操作,就可以在MaxCompute中上...

阿里云官方博客
33分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部