下面的示例演示如何开始针对接口进行编码:
从…
TMyObject = class
function Add(a, b: integer): integer;
end;至
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;但是,如果类有一个祖先,例如,我如何处理?
TMyObject = class(TMyClassDerivedDirectlyFromTObjectSoItsGotNothingInItAtAll)
function Add(a, b: integer): integer;
end;发布于 2013-09-12 11:04:38
首先:我要重命名接口:
IMyAddFunction = interface
['{BFC7867C-6098-4744-9774-35E0A8FE1A1D}']
function Add(a, b: integer): integer;
end;如果祖先已经实现了IInterface,这并不难:
TTable继承了已经为您实现(现有) IInterface的TComponent。所以你可以这么做:
TMyObject = class(TTable, IMyAddFunction)
function Add(a, b: integer): integer;
end;如果不是,那么您必须自己实现IInterface:
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给出的答案中引用的方法。
发布于 2013-09-12 10:35:44
当您有一个实现接口的类时,这个类必须提供三种方法:_AddRef、_Release和如果您查看TInterfacedObject代码,您将注意到那里的那些方法。事实上,TInterfacedObject的存在只是为了使创建新的接口实现者类变得更容易。
如果您不能从TInterfacedObject,继承您的新类,那么您必须自己提供这些方法。例如,您可以将TInterfacedObject实现复制到类中,然后类将成为接口实现者。
https://stackoverflow.com/questions/18761716
复制相似问题