`
阿尔萨斯
  • 浏览: 4148992 次
社区版块
存档分类
最新评论

Delphi中的接口和抽象类

 
阅读更多

接口:Interface

Delphi中接口的关键字是Interface,但它和Pascal单元中的Interface没有任何联系。

1、抽象类

Delphi中的抽象类只定义行为的类,它规定了由此派生的类必须具备某些行为。但是抽象类不实现这些行为,而必须由其派生类去实现这些行为。所以,它只是一种“抽象”的类,而且,我们无法为抽象类创建实例。比如这段代码:

TCode = class

Protected

function Decode(Src: String): String; virtual; abstract;

function Encode(Src: String): String; virtual; abstract;

End;

这是段代码定义了一个有密码的抽象类,它规定了该类的两个行为,即编码和解码。但它只是规定了这两个行为而没有去实现它们,因为具体到不同的加密体系,它们编码和解码的行为是不一样的,所以这两个行为交由具体的派生类去实现。这是一段合法的代码,但是当我们试图去创建它的实例的时候Delphi就会抛出一个EAbstractError的异常,因为我们不能为一个抽象类去创建它的实例。

抽象类只定义了行为而没有去实现它们,所以它是“抽象”的。

2、接口和抽象类的不同

接口也定义了一系列的行为而没有去实现这些行为,这一点上它和抽象类是一样的。准确地说,接口只是规定了接口的提供者和接口的使用者之间的协议。

既然有了抽象类了为什么还要接口?那一定是接口和抽象类有不同的地方,正是这种不同使它们应用在不同的场合或者满足不同的需要。弄清楚这些不同之处的过程,也就是我们理解接口这个概念的过程。

我们以同样的内容来声明一个接口:

ICode = interface

function Decode(Src: String): String;

function Encode(Src: String): String;

End;

从形式上看它和抽象类还是有点区别的:

1) 接口都以“I”打头(类以“T”打头)

2) 接口的关键字是interface(类的关键字是class)

3) 因为接口中所有的函数和过程都是虚的,所以无须再加上virtual的关键字

但以上的区别只是形式上的,还有一些实质上的区别:

1) 对接口创建实例的代码在Delphi中是非法的,在编译期就会出现异常

2) 接口中所有的方法都是公有的,因此不能对接口的域进行定义

3) 在接口中不能申明变量,这是它和类的一个很大的区别,因为接口只定义了行为而对实现这些行为不做规定,但是如果允许接口定义变量,则就会在某种程度上干预或限制实现行为的方法

4)接口是不变的,也就是说,一旦声明并公开了某个接口后就不允许再对它进行修改,如果我们要增删它所规定的行为,就只能另外声明一个接口

3、接口的GUID

GUID是“全球唯一标识符”的缩写,它借助复杂的算法而保证在全球范围内的唯一性。每个接口都有一个GUID,系统据此注册和调用接口。事实上,上面那段声明接口的代码是不完整的,完整的声明代码看上去应该是这样的:

ICode = interface

['{56E57F5F-5DD8-42FC-8D27-C35968C4474E}']

function Decode(Src: String): String;

function Encode(Src: String): String;

End;

好在我们不必去关心GUID是怎样产生的,当我们需要给一个接口创建一个GUID时,我们只要在Delphi的IDE中同时按下Ctrl、Shift和G三个键,光标所在的位置就会出现一个GUID。其实这不是Delphi自己胡编出来的GHID,而是Delphi调用了Windows的API的函数CoCreateGuid创建的,它借助开放软件基金会(OSF)定义的算法,从统计学的角度说,能保证其全球唯一性。

分享到:
评论

相关推荐

    Delphi6应用开发指南-第七章(抽象类和静态接口)

    Delphi6应用开发指南 Delphi6应用开发指南

    《Delphi6应用开发指南》PDF书

    --------第01章_走进Delphi.pdf第02章_学好面向对象的Pascal.pdf第03章_Delphi 体系结构的关键类.pdf第04章_定义多态和动态过程.pdf第05章_集合、常数与运行时类型信息编程.pdf第06章_接口的奥秘.pdf第07章_抽象类和...

    Delphi面向对象编程思想

    多态、接口、虚方法、抽象类等概念和面向对象编程上的具体应用。  建立在动态绑定机制上和类型转换机制上的面向对象高级编程技巧。  为了实现程序的可维护性、可扩展性和可重用性,而对封装、界面和业务对象的分离...

    Delphi模式编程第一分卷

    2.4 接口抽象机制 2.4.1 接口的概念 2.4.2 抽象类 2.4.3 对象接口 2.4.4 抽象类与对象接口的比较 2.4.5 针对接口而不是针对实现编程 第3章 模式编程法则 3.1 开闭法则(OCP) 3.2 Liskov代换法则(LSP) ...

    Delphi模式编程第二分卷

    2.4 接口抽象机制 2.4.1 接口的概念 2.4.2 抽象类 2.4.3 对象接口 2.4.4 抽象类与对象接口的比较 2.4.5 针对接口而不是针对实现编程 第3章 模式编程法则 3.1 开闭法则(OCP) 3.2 Liskov代换法则...

    Delphi5开发人员指南

    4.1 理解Delphi环境和项目的体系结构 79 4.2 构成Delphi 5项目的文件 79 4.2.1 项目文件 80 4.2.2 单元文件 80 4.2.3 窗体文件 80 4.2.4 资源文件 81 4.2.5 项目选项及桌面设置文件 81 4.2.6 备份文件 81 4.2.7 包...

    Delphi 6应用开发指南

    第7章 抽象类和静态接口.doc 第8章 高级特性编程.doc 第9章 创建定制组件.doc 第10章 高级组件设计.doc 第11章 用组件研制一致界面.doc 第12章使用Microsoft自动化制组件.doc 第13章 使用Data Access组件.doc 第14章...

    Delphi编写DLL组件并调用的演示示例.rar

    Delphi编写DLL组件并调用的演示示例,内含:使用抽象类(示例程序8-5)、使用接口(示例程序7-8)、未使用DLL(示例程序3-13)、用Dll封装对象(示例程序7-6)。主要研究Delphi 中的DLL 封装和调用对象技术,...

    Delphi 5编程实例与技巧

    2.3.5 抽象类 38 2.3.6 运行时类型信息 39 2.3.7 类方法 41 2.3.8 类引用 42 2.3.9 单元文件与工程文件 43 2.4 异常处理 45 2.4.1 raise语句 45 2.4.2 try...except语句 45 2.4.3 try...finally语句 47 2.5 方法与...

    Delphi接口剖析

    摘要:Delphi源码,系统相关,接口 本源码包内包括以下源码:接口的其它用法探索、接口和抽象类的实例、接口和多重继承的实例、Delphi实现接口的实例、模拟对象状态改变后自动恢复。

    DELPHI 5编程实例与技巧

    2.3.5 抽象类 38 2.3.6 运行时类型信息 39 2.3.7 类方法 41 2.3.8 类引用 42 2.3.9 单元文件与工程文件 43 2.4 异常处理 45 2.4.1 raise语句 45 2.4.2 try...except语句 45 2.4.3 try...finally语句 47 2.5 方法与...

    C语言最新编程技巧200例

    C语言最新编程技巧200例 第1章 走进Delph 第2章 学好面向对象的Pascal 第3章 Delphi体系结构的关键类 第4章 定义多态和动态过程 第5章 集合、常数与运行时类型信息...第7章 抽象类和静态接口 第8章 高级特性编程 ……

    D5开发人员指南-02卷

    9.6 在Delphi应用程序中使用DLL 242 9.7 DLL的入口函数和出口函数 246 9.7.1 进程/线程初始化和终止例程 246 9.7.2 DLL入口/出口示例 246 9.8 DLL中的异常 250 9.8.1 在16位Delphi中捕捉异常 250 9.8.2 异常和...

    《程序设计大学教程试读》PDF版

    1798.2 继承 1838.2.1 使用继承 1848.2.2 继承与合成 1918.3 多态 1938.3.1 多态与动态绑定 1938.3.2 方法的覆盖、隐藏和重载1968.4 接口 1988.4.1 接口的概念 1988.4.2 Delphi对象接口 1998.4.3 接口应用实例 2038....

    短信收发控件为标准的AcitveX控件

    如VB、VC、DELPHI、.NET平台,也支持VBS、JS之类的服务端脚本,能广泛用于各类开发环境。 系统特点 OCX控件方式提供,使用极其方便 属性、方法、事件抽象合理、精简,容易理解使用 同时支持同步及异步发送两...

    directX9 DXUT框架剖析

    DXUT框架剖析(13) 摘要: DXUT框架对文本绘制进行了封装,提供了类CDXUTHelper来简化文本显示,使用该接口大体分为3个步骤:初始化ID3DXSprite和ID3DXFont对象,显示文本,释放ID3DXSprite和ID3DXFont对象。...

    编程新手真言......

    3.12 类VB,DELPHI类RAD语言分析 82 第4章 语言最小内核(C) 83 4.1 C与C++是二种不同的语言 83 4.2 C的数组,指针与字符串 84 4.3 C的输入与输出流 84 4.4 C的类型系统与表达式 85 4.5 二进制指令看循环 85 4.6 所谓...

    C#微软培训资料

    15.5 抽象类与接口 .195 15.6 小 结 .196 第十六章 组织应用程序 .198 16.1 基 本 概 念 .198 16.2 使用名字空间 .200 16.3 使用指示符 .203 16.4 程 序 示 例 .206 16.5 小 结 .213 第十七章 文 件 ...

    《设计模式可复用面向对象软件的基础》

    442.8.1 访问分散的信息 442.8.2 封装访问和遍历 452.8.3 Iterator类及其子类 462.8.4 Iterator模式 482.8.5 遍历和遍历过程中的动作 482.8.6 封装分析 482.8.7 Visitor 类及其子类 512.8.8 Visitor 模式 522.9 小结...

Global site tag (gtag.js) - Google Analytics