- 浏览: 139576 次
- 性别:
文章分类
最新评论
接口: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)定义的算法,从统计学的角度说,能保证其全球唯一性。
发表评论
-
Delphi中票据凭证的精确打印
2011-04-06 15:13 1024一、概述 在银行,税务,邮政等行业的实际工作中,经常涉及到在 ... -
Delphi编程中流的应用
2011-05-25 11:19 840一、流的概念 流简单说是建立在面向对象基础上的一种 ... -
Pascal与C的指针
2011-05-26 13:49 1071大家都认为,C语言 ... -
Delphi编程的一些资料1
2011-06-16 10:40 777手机 SMS PDU 格式参考手册 1.相关的GSM AT指 ... -
Delphi编程的一些资料2
2011-06-16 10:43 757算法步骤: 一、地址 ... -
Delphi编程的一些资料3
2011-06-16 10:46 823一、一般命令 AT+CGMI ... -
Delphi编程的一些资料4
2011-06-16 10:48 825七、追加服务命令 AT+CCFC 呼叫继续 ... -
Delphi编程的一些资料5
2011-06-16 10:53 810十三、SIM卡工具箱命令 AT+STSF ... -
短信文本模式下的解码方法
2011-06-16 10:57 834接收短信有两种编码格式: 1.中英文混合的为unicode 2 ... -
通过注册表获取当前所有串口号
2011-06-16 15:49 2752usesWindows, Messages, SysUtils ... -
Delphi 分隔GSMModem接收到的短信字符串
2011-06-20 10:37 1126Delphi 分隔GSMModem接收到的短信字符串 ... -
Delphi流的操作
2011-06-22 14:34 842Delphi流的操作 一、流的概念 流简单说是建立在面 ... -
Delphi、PChar和Char数组的比较
2011-06-22 16:14 1319Delphi、PChar和Char数组的 ... -
Delphi 判断数据库表是否存在
2011-06-26 12:54 1152//根据表名和一个数据库连接判断表是否存在 function ... -
Delphi ListView基本用法大全
2011-08-22 17:27 1419Delphi ListView基本用法大全 //增加项或列( ... -
Delphi2010 无效的类别字符串, ProgID: "ADOX.Catalog"问题
2012-07-18 09:56 2153程序中用ADOX创建的Access数据库,一直运行正常,其 ... -
Delphi 禁用TEdit右键菜单及复制粘贴
2012-07-19 11:24 1405Delphi 禁用TEdit右键菜单及复制粘贴简的单方法 ... -
Delphi TStrings取得Ini文件键值对
2012-07-20 07:37 1365Delphi TStrings取得Ini文件键值对的简单 ... -
Delphi 压缩Access数据库
2012-07-21 12:21 1693由于Access数据库在反复使用过程中会自动增大,Del ...
相关推荐
在深入探讨《Delphi6应用开发指南》的第七章——“抽象类和静态接口”时,我们关注于抽象接口的概念及其重要性,以及静态接口在Delphi编程中的具体实现方式。这一章节为我们提供了理解现代软件架构设计的关键概念,...
抽象类中可以定义抽象方法,这些方法在子类中进行具体实现。 2. **声明格式**: - 抽象类声明:`abstract class ClassName` - 抽象方法声明:`abstract method methodName(paramList) returns returnType` 3. **...
通过阅读和分析这些源码,你可以更深入地理解Delphi接口的工作原理和实际应用。 此外,接口在组件开发中也扮演着重要角色。Delphi的VCL(Visual Component Library)和FireMonkey(FMX)框架中,很多组件都通过接口...
在 Delphi 中,接口(Interface)是一种纯抽象类型,定义了一组方法签名,但不提供具体的实现。任何类可以实现一个或多个接口,表明它支持接口中声明的所有方法。通过接口,我们可以确保对象遵循一定的规范,而无需...
本示例代码“Delphi接口委托的例子代码”着重展示了如何使用接口进行委托,并演示了在运行期间动态切换接口实现的技巧。 首先,让我们来看看`UMyIntf.pas`文件中的接口定义。在这个文件中,通常会声明一个或多个...
通过本文的介绍,我们可以看出接口在 Delphi 中的应用非常广泛,尤其是在处理复杂的类间关系时。接口不仅可以简化类的设计,还能提高系统的灵活性和可扩展性。对于 Delphi 开发者来说,熟练掌握接口的使用是非常重要...
在这个类中,我们可以选择直接实现方法,或者将方法的调用委托给其他对象。 ```delphi TMyClass = class(TInterfacedObject, TMyInterface) private FDelegate: TMyInterface; public constructor Create(delegate...
4. **多态性**: Delphi的面向对象特性支持多态性,即接口的方法在不同的类中可以有不同的实现。这使得即使接口统一了方法签名,实际的行为可以根据具体对象的不同而变化。 ```delphi type TBaseClass = class...
5. **接口继承**:Delphi接口支持多重继承,一个接口可以继承多个其他接口,从而扩展其功能。这在设计大型系统时非常有用。 6. **IDispatch接口**:对于需要支持Automation(自动化)或Scripting(脚本)的组件,...
总的来说,"Delphi接口实例"是一个极好的学习资源,可以帮助开发者掌握在Windows环境下使用Delphi进行COM组件开发的技巧,从而提升软件的可扩展性和互操作性。通过实际操作和代码分析,你可以更好地理解和运用这些...
在Delphi编程环境中,DLL(动态链接库)是一种非常重要的技术,它允许开发人员将代码模块化,提高代码重用性,并减少应用程序的内存占用。...在实践中,结合接口、抽象类和导出函数,可以构建出高效且易于管理的系统。
接口在Delphi中是一个纯抽象的类型,它定义了一组方法,但不提供实现。接口通过`I`开头的标识符来声明,例如`IMyInterface`。一个类可以实现多个接口,从而承诺提供接口中定义的所有方法的实现。接口的主要优点是...
此外,还会深入讲解面向对象编程的核心概念,如类、对象、继承、多态和封装,以及接口和抽象类的使用。 “控件及网络设计”章节则聚焦于Delphi的GUI(图形用户界面)开发。Delphi的VCL库提供了丰富的控件集,如按钮...
在Delphi中,我们可以创建抽象类,这些类不提供具体的实现,但定义了必须由子类实现的接口。这样,我们可以在不影响其他代码的情况下,增加新的功能或改变现有功能的实现。 2. **接口**:接口在Delphi中是一种纯...
在接口中定义一个普通成员内部类(非抽象类),意味着这个内部类将作为接口的一部分,任何实现该接口的类都可以访问并使用它。下面是一个简单的示例: ```delphi type IMyInterface = interface // 接口方法声明 ...
Delphi允许我们在一个类中定义多个同名方法,只要它们的参数数量或类型不同即可。这使得我们可以根据传入的参数类型或数量调用相应的方法,提高了代码的可读性和灵活性。例如: ```delphi class procedure MyMethod...
例如,在某些情况下,如果一个类需要实现的接口中有大量的方法,而这些方法的实际实现可能存在于其他类中,那么直接在当前类中实现这些方法可能会导致不必要的内存消耗。通过使用 `implements` 指示符,我们可以延迟...
抽象类用于定义接口和共享行为,但不能被实例化。静态接口则提供了无状态的方法集合,常用于提供服务或工具类。本章将详细解析这两者的差异和应用场合。 5. **第9章 创建定制组件** Delphi的强大之处在于其组件化...
Delphi还支持抽象类(类中包含抽象方法的类)和接口(纯虚方法的集合)。抽象类通常作为基类使用,定义公共接口但不提供具体实现。接口则更像一种契约,强制实现特定方法。 **继承深度和多重继承:** Delphi支持...