Rob*_*ler 10 delphi interface iunknown
尽管经过多年的Delphi编程,我还是遇到了一个我从未见过的类声明样式,它支持IUnknown:
TBCUnknown = class(TBCBaseObject, IUnKnown)
private
FRefCount: integer;
FOwner : Pointer;
protected
function IUnknown.QueryInterface = NonDelegatingQueryInterface;
function IUnknown._AddRef = NonDelegatingAddRef;
function IUnknown._Release = NonDelegatingRelease;
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
...
Run Code Online (Sandbox Code Playgroud)
如您所见,IOUnknown接口方法的类方法的赋值正在类声明中完成.这看起来很奇怪,特别是因为我没有看到在调用构造函数之前如何分配IUnknown方法.这是一种编译时快捷方式,用于在类的方法和类接受的接口的接口指针之间进行分配,稍后在运行时解析吗?如果有人可以提供一些关于它是如何工作的信息以及Delphi成语支持这种构造我想知道的.
Ond*_*lle 12
它被称为方法解析子句,它允许您指定实际实现指定接口方法的方法.这意味着实现方法可以具有与接口中声明的方法不同的名称(但方法签名仍然必须匹配).如果没有该子句,Delphi会根据其名称自动解析实现方法.
在您的示例中,声明表示IUnknown._AddRef由by TBCUnknown.NonDelegatingAddRef和IUnknown._Releaseby 实现TBCUnknown.NonDelegatingRelease.
据我所知,当语言中添加了界面支持时,从一开始就支持这一点.您可能没有注意到它,因为它不经常使用或需要它.