Interface接口.
什么是接口:
只声明方法,而不实现方法.
简单的说,接口就是包含一系列不被实现的方法.而把这些方法的实现交给继承它的类.
继承了此接口的类必须去实现接口中的每一个方法.既需要实现接口中的全部方法.
接口与类很相似.
接口只能在程序或单元的最外层声明,而不能再过程或函数中声明.
type interfaceName = interface (ancestorInterface)
['{GUID}'] //接口标识
memberList //方法列表
end;
ancestorInterface (祖先类)
接口和类一样,继承它祖先的所有方法.但接口不象类那样去实现这些方法.他把这些方法的实现委托给支持此接口的类.
声明一个接口时可以指定一个祖先接口,如果没有指明的话,则它直接继承自 IInterface。IInterface 在System 单元定义,是其它所有接口的根类。IInterface 定义了三个方法:QueryInterface、_AddRef 和_Release。
对于memberlist 我们需要注意
1.memberList只包括方法和属性,字段在接口中是不允许的;
2.因为接口没有字段,所以属性的读(read)和写(write)限定符必须是方法;
3.接口的所有成员都是公有的(public) ,不允许使用可见性限定符和存储限定符(但一个数组属性能被声明为 default) ;
4.接口没有构造函数和析构函数,它们不能被(直接)实例化,除非使用实现了它们(的方法)的类;
5.方法不能被声明为 virtual、dynamic、abstract或 override。因为接口自己不实现它们的方法,这些声明没有意义.
接口标志[GUID]: 一个全局唯一标识符(GUID),它用一个被中括号括起来的字符串表示,它出现在接口的成员之前。使用Ctrl+Shift+G 自动创建
接口调用约定(Calling conventions for interfaces):
在接口中虽然不能使用”方法绑定”,但是可以使用调用约定.
默认的调用约定是register ,如果你的程序或程序模块需要共享例程时,可以使用stdcall 调用约定.也可以根据实际情况调用其他的约定.
接口属性(Interface properties):
接口声明的属性只能通过接口类型的表达式进行访问,类类型的变量不行;
并且,接口的属性只在接口被编译的程序中是可见的。
Forward declarations(Forward(前瞻性) 声明)
若声明一个接口时以 interface 关键字和一个分号结束,没有指定它的祖先、GUID 以及成员列表,这是一个 forward 声明。
Forward 声明的接口必须在同一个声明区域进行定义声明,换句话说,在 forward 声明和它的定义声明之间除了类型声明外,不能有任何其它内容。.
相互继承(派生)的接口是不允许的.