从其它平台迁移而来
由于没有太多编写接口的经验,此处仅简单说明语法。后期对接口有更多认知和经验后再进行详细记录。
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
的接口是非侵入式的,接口编写者无须知道接口被哪些类型实现。而接口实现者只需知道实现的是什么样子的接口,但无须指明实现哪一个接口。
1
2
3
4
5
|
type 接口类型名 interface{
方法名1 (形参列表1) 返回值列表1 //参数列表和返回值列表中的参数变量名可以被忽略
方法名2 (形参列表2) 返回值列表2
...
}
|
如果一个任意类型 T 的方法集为一个接口类型的方法集的超集,则我们说类型 T 实现了此接口类型。T 可以是一个非接口类型,也可以是一个接口类型。
接口的实现需要遵循两条规则才能让接口可用:
-
接口的方法与实现接口的类型方法格式一致。
-
接口中所有方法均被实现。