接口最大的用途是把类继承与类型继承分离开来,类继承是实现代码重用的最有力的工具,派生类可以轻易继承基类的字段,属性,方法。但类继承会迫使派生类
存储基类声明的所有字段,但有时不需要这样,
而接口正是解决这个问题的,也就是说类型继承
在接口中声明的只能是方法和属性,而没有字段。它是调用者和被调用者之间的一种协议,调用者不管具体怎么实现,用什么字段,用什么数据,只是使用这个公布的接口所提出的行为
1、接口在Delphi中有两种用法。一种实现在一个类上(这是不需要GUID,因为不需要注册这个接口),另一种用在COM中(需要GUID)。
2、接口中只能定义方法。
(1)没有方法的实现。
(2)不能定义变量。
也就是说接口中的方法都是虚的,需要在类中实现。
3、COM对象实现了接口,在系统中注册后可以重复调用。在面向对象开发环境中,使用COM对象的时候,通常通过向应用程序中引入类型库(.tlb,.dll,.exe,.olb等文件中)的办法来获得COM对象中的接口方法的申明,从而调用它们。
2.1 声明接口
说明(1):如果有继续关系则在括号里填父接口,否则省却,如:IMyInterface = interface这样就行。
存储基类声明的所有字段,但有时不需要这样,
而接口正是解决这个问题的,也就是说类型继承
在接口中声明的只能是方法和属性,而没有字段。它是调用者和被调用者之间的一种协议,调用者不管具体怎么实现,用什么字段,用什么数据,只是使用这个公布的接口所提出的行为
1、接口在Delphi中有两种用法。一种实现在一个类上(这是不需要GUID,因为不需要注册这个接口),另一种用在COM中(需要GUID)。
2、接口中只能定义方法。
(1)没有方法的实现。
(2)不能定义变量。
也就是说接口中的方法都是虚的,需要在类中实现。
3、COM对象实现了接口,在系统中注册后可以重复调用。在面向对象开发环境中,使用COM对象的时候,通常通过向应用程序中引入类型库(.tlb,.dll,.exe,.olb等文件中)的办法来获得COM对象中的接口方法的申明,从而调用它们。
2.1 声明接口
IMyInterface = interface(IInterface) //说明(1)
['{63E072DF-B81E-4734-B3CB-3C23C7FDA8EA}'] //说明(2)
function GetName(const str: String): String; stdcall;
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; //说明(3)
function _AddRef: Integer; stdcall; //使接口引用数加1。
function _Release: Integer; stdcall;//使接口引用数减1,当小于等于0时作释放动作。
end;
['{63E072DF-B81E-4734-B3CB-3C23C7FDA8EA}'] //说明(2)
function GetName(const str: String): String; stdcall;
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; //说明(3)
function _AddRef: Integer; stdcall; //使接口引用数加1。
function _Release: Integer; stdcall;//使接口引用数减1,当小于等于0时作释放动作。
end;
说明(1):如果有继续关系则在括号里填父接口,否则省却,如:IMyInterface = interface这样就行。
说明(2):此GUID可选,如果要实现具有COM特性的接口的话则需要加上,Delphi中对于有GUID的接口在运行时在VMT表的
预定位置生成接口的信息,如接口方法的定义、方法参数定义能详细信息。
说明(3):接口必须实现这三个函数。
http://maocom.com/resources/program/html/2006716/2801.htm
http://dev.csdn.net/article/77/77019.shtm
使用接口
当定义一个抽象类来表示带层次结构的基类时,会发现抽象类时如此抽象,以至于它只列出了一系列虚拟函数,而没有提供任何实际的代码。这种纯抽象类还可以使用一种特殊的技术--接口--来定义。因此,也将这些类称为接口。
从技术上讲,一个接口并不是一个类,尽管它类似于类。接口不是类,因为它们被看作是完全独立的元素,具有与众不同的特性:
1.接口类型对象是引用计数的,当对象不再有引用时会被自动销毁。该机制与delphi管理长字符串的方法相似,使得内存管理几乎完全自动化。
2.一个类可以继承自一个基类,但它还可以实现多个接口。
3.因为所有类都派生自TObject,所有接口都派生自IInterface,故形成一个总的独立层次。
接口基类在Delphi5之前一直是IUnknown,但Delphi6为它引入了一个新名称IInterface
http://maocom.com/resources/program/html/2006716/2801.htm
http://dev.csdn.net/article/77/77019.shtm
使用接口
当定义一个抽象类来表示带层次结构的基类时,会发现抽象类时如此抽象,以至于它只列出了一系列虚拟函数,而没有提供任何实际的代码。这种纯抽象类还可以使用一种特殊的技术--接口--来定义。因此,也将这些类称为接口。
从技术上讲,一个接口并不是一个类,尽管它类似于类。接口不是类,因为它们被看作是完全独立的元素,具有与众不同的特性:
1.接口类型对象是引用计数的,当对象不再有引用时会被自动销毁。该机制与delphi管理长字符串的方法相似,使得内存管理几乎完全自动化。
2.一个类可以继承自一个基类,但它还可以实现多个接口。
3.因为所有类都派生自TObject,所有接口都派生自IInterface,故形成一个总的独立层次。
接口基类在Delphi5之前一直是IUnknown,但Delphi6为它引入了一个新名称IInterface