Delphi 的接口(1) - 前言

来源:互联网 发布:我的世界mac懒人包 编辑:程序博客网 时间:2024/05/06 23:41

======================================================
注:本文源代码点此下载
======================================================

之前, 有朋友夸过我: 博文通俗易懂, 能把复杂的问题简单化;

希望我对接口的理解也能对大家有所帮助; 不过其中个人理解的成分多些, 错误之处万望指出.

"接口" 的概念和 "类" 特别是 "抽象类" 近似, 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 并继续完善着, 接下来要讨论的是作为语言特性的 "接口" 概念与使用.

我曾经被 "接口" 置于云雾之中, 一些书也让人越看越糊涂; 明白了以后发现其实挺简单的, 相比 "类" 的规则要简单许多.


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
原创粉丝点击