Delphi中具有多个实现的单个接口

Rab*_*Guy -4 delphi delphi-xe8

我可以用我使用的其他语言来做到这一点.例如,我可以在创建Web应用程序时在PHP中执行此操作,但这是我想要做的并且找不到解决方案:

我想定义一个接口说:

unit myBigUnit;

interface

 uses someUnits;

 type
   TsampleType = class
     someVar: Integer;
     someOtherVar: Integer;
     someObj: TneatObj;
     procedure foo;
     function bar : String;
     procedure foobar(a: boolean);
Run Code Online (Sandbox Code Playgroud)

所有这些都在一个文件中.现在我想要两个实现此接口的文件或者至少知道它.在PHP我可以说

class blah implements thisInterface
Run Code Online (Sandbox Code Playgroud)

但我在Delphi中找不到相同的东西.我想要做的是在一个单元中实现它,而在另一个单元中我只是想让它知道这些函数/过程/等等,所以我可以从那里调用它们.我不在乎它是如何实现的.我认为这是接口并将它们与实现者分开的重点?

我如何在Delphi中执行此操作?

Rem*_*eau 5

您需要使用实际的界面,例如:

 type
   IsampleType = interface
     procedure foo;
     function bar : String;
     procedure foobar(a: boolean);
   end;
Run Code Online (Sandbox Code Playgroud)

一个interface只能有方法和属性,而不是变量.

然后,您可以根据需要在类中实现接口,例如:

type
  TMyClass = class(TInterfacedObject, IsampleType)
  public
    someVar: Integer;
    someOtherVar: Integer;
    someObj: TneatObj;
    procedure foo;
    function bar : String;
    procedure foobar(a: boolean);
  end;
Run Code Online (Sandbox Code Playgroud)

var
  Sample: IsampleType;
begin
  Sample := TMyClass.Create;
  // use Sample as needed...
end;
Run Code Online (Sandbox Code Playgroud)

Delphi接口是引用计数的. TInterfacedObject为您处理引用计数.当引用计数降为0时,它会自动释放对象.

您可以在Delphi的文档中找到更多详细信息:

对象接口索引