在Delphi 6类声明中分配接口指针?

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.NonDelegatingAddRefIUnknown._Releaseby 实现TBCUnknown.NonDelegatingRelease.

据我所知,当语言中添加了界面支持时,从一开始就支持这一点.您可能没有注意到它,因为它不经常使用或需要它.

  • @Robert我也会说,一般来说,如果你等了24个小时左右才接受答案,那么你可能会得到更多答案,更好,更深入的答案.在这种情况下,没有什么比已经说过的更多的话.但是对于一个更复杂的问题,如果你让它开放一段时间鼓励人们添加真正好的答案,需要更多的时间来制作. (3认同)
  • @RobertOschler真的吗?在这里它显示在我的后2分钟. (2认同)
  • @Robert TOndrej在我面前回答.我们在同一时间写下答案.我坚信你应该接受*最好的答案,而不是第一个答案.完全取决于你判断哪个答案是最好的. (2认同)
  • :-) 谢谢.无论如何,我同意David的观点,你应该接受你认为最好的答案(我希望你在这种情况下做到了). (2认同)