- 142 -
Object inteces
Calling conventions for inteces(接口调用约定)
默认的调用约定是register,但当接口在程序模块(尤其当它们用其它语言编写时)间共享时,需要声明所有的方法为stdcall调用方式;实现CORBA接口时使用safecall调用约定;在Windows下,你可以用safecall来实现双重调度接口的方法。
关于调用约定的更多信息,请参考Calling conventions。
Intece properties(接口属性)
接口声明的属性只能通过接口类型的表达式进行访问,类类型的变量不行;并且,接口的属性只在接口被编译的程序中是可见的。比如,在Windows下,COM对象没有属性。
在接口中,属性的读和写必须通过方法来完成,因为不存在字段。
Forward declarations(Forward声明)
若声明一个接口时以intece关键字和一个分号结束,没有指定它的祖先、GUID以及成员列表,这是一个forward声明。Forward声明的接口必须在同一个声明区域进行定义声明,换句话说,在明和它的定义声明之间除了类型声明外,不能有任何其它内容。
Forward声明允许定义相互依赖的接口,例如
type
IControl = intece;
IWindow = intece
['{00000115-0000-0000-C000-000000000044}']
function GetControl(Index: Integer): IControl;
...
end;
IControl = intece
['{00000115-0000-0000-C000-000000000049}']
function GetWindow: IWindow;
...
end;
相互继承(派生)的接口是不允许的。比如,从IControl派生IWindow,又从IWindow
非法的。
Implementing inteces(实现接口)
Implementing inteces(实现接口)
一旦声明一个接口,在使用之前必须通过一个类来实现它。实现接口的类必须在声明时指定接口,它出现在父类的名称之后。声明有如下格式
type className = class (ancestorClass, intece1, ..., intecen)
memberList
end; forward声IControl是
- 143 - 派生
Object inteces
比如,
type
TMemoryManager = class(TIntecedObject, IMalloc, IErrorInfo)
...
end;
声明了一个叫做TMemoryManager的类,它实现了IMalloc和IErrorInfo接口。当一个类实现某个接口时,它必须实现(或通过继承实现)接口声明的每个方法。
下面是System单元中TIntecedObject的声明:
type
TIntecedObject = class(TObject, IIntece)
protected
FRefCount: Integer;
function QueryIntece(const IID: TGUID; out Obj): HResult; stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
public
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-107.html
我也是5s还在纠结要不要更新
第二我们应该加快自己在南沙的岛礁建设