从Delphi到Go——接口

℡╲_俬逩灬. 提交于 2020-02-25 22:13:04

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

Delphi

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

声明

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继承。

实现

type
  //含接口的类的声明
  TMyClass = class(基类, 接口)
  public
    procedure Proc;    //接口方法
  end;
//接口实现
procedure TMyClass.Proc;
begin
  //接口方法的具体实现
end;

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

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

Go

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

声明

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

实现

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

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

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

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!