从其它平台迁移而来


由于没有太多编写接口的经验,此处仅简单说明语法。后期对接口有更多认知和经验后再进行详细记录。

Delphi

Delphi的接口是侵入式接口,并且是单继承的,但类可以同时实现多个接口,类声明时需要显示声明实现了哪些接口。

声明

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
type
  //直接声明
  IMyInterface1 = interface
    function Func1: Integer;                        //函数
    procedure Proc1(Value: Integer);                //过程
    property MI: Integer read Func1 write Proc1;    //属性
  end;
  //从已有接口继承
  IMyInterface2 = interface(IMyInterface1)
    procedure Proc2;
  end;
  //含有 GUID 的接口可以公开给其它进程调用
  IMyInterface3 = interface
    ['{3E51374A-D0E8-4C84-AA30-9634409E45DD}']
    procedure Proc3;
  end;

Delphi已经提供了基接口IInterface,自己声明的接口最好从IInterface继承。

实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
type
  //含接口的类的声明
  TMyClass = class(基类, 接口)
  public
    procedure Proc;    //接口方法
  end;
//接口实现
procedure TMyClass.Proc;
begin
  //接口方法的具体实现
end;

一个类可以有多个接口,所有接口的所有方法在类中必须全部实现。

Delphi同样提供了实现了基接口IInterface的基类TInterfacedObject,从TInterfacedObject继承可以省去接口引用管理的实现。

Go

Go的接口是非侵入式的,接口编写者无须知道接口被哪些类型实现。而接口实现者只需知道实现的是什么样子的接口,但无须指明实现哪一个接口。

声明

1
2
3
4
5
type 接口类型名 interface{
  方法名1 (形参列表1) 返回值列表1    //参数列表和返回值列表中的参数变量名可以被忽略
  方法名2 (形参列表2) 返回值列表2
  ...
}

实现

如果一个任意类型 T 的方法集为一个接口类型的方法集的超集,则我们说类型 T 实现了此接口类型。T 可以是一个非接口类型,也可以是一个接口类型。

接口的实现需要遵循两条规则才能让接口可用:

  1. 接口的方法与实现接口的类型方法格式一致。

  2. 接口中所有方法均被实现。