首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向不包括TInterfacedObject的类层次结构中添加接口?

如何向不包括TInterfacedObject的类层次结构中添加接口?
EN

Stack Overflow用户
提问于 2013-09-12 10:25:30
回答 2查看 273关注 0票数 2

下面的示例演示如何开始针对接口进行编码:

从…

代码语言:javascript
复制
TMyObject = class
  function Add(a, b: integer): integer;
end;

代码语言:javascript
复制
IInterface = interface
  ['{BFC7867C-6098-4744-9774-35E0A8FE1A1D}']
  function Add(a, b: integer): integer;
end;

TMyObject = class (TInterfacedObject, IInterface 
  function Add(a, b: integer): integer;
end;

但是,如果类有一个祖先,例如,我如何处理?

代码语言:javascript
复制
TMyObject = class(TMyClassDerivedDirectlyFromTObjectSoItsGotNothingInItAtAll)
    function Add(a, b: integer): integer;
end;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-12 11:04:38

首先:我要重命名接口:

代码语言:javascript
复制
IMyAddFunction = interface
  ['{BFC7867C-6098-4744-9774-35E0A8FE1A1D}']
  function Add(a, b: integer): integer;
end;

如果祖先已经实现了IInterface,这并不难:

TTable继承了已经为您实现(现有) IInterface的TComponent。所以你可以这么做:

代码语言:javascript
复制
TMyObject = class(TTable, IMyAddFunction)
    function Add(a, b: integer): integer;
end;

如果不是,那么您必须自己实现IInterface:

代码语言:javascript
复制
IInterface = interface
  ['{00000000-0000-0000-C000-000000000046}']
  function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
  function _AddRef: Integer; stdcall;
  function _Release: Integer; stdcall;
end;

Delphi附带了源代码,因此您可以查看TComponent实现的实现,并实现AlexSC给出的答案中引用的方法。

票数 0
EN

Stack Overflow用户

发布于 2013-09-12 10:35:44

当您有一个实现接口的类时,这个类必须提供三种方法:_AddRef_Release如果您查看TInterfacedObject代码,您将注意到那里的那些方法。事实上,TInterfacedObject的存在只是为了使创建新的接口实现者类变得更容易。

如果您不能从TInterfacedObject,继承您的新类,那么您必须自己提供这些方法。例如,您可以将TInterfacedObject实现复制到类中,然后类将成为接口实现者。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18761716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档