接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式,就如面向对象程序设计提供的多重抽象化。接口可能也提供某种意义上的在讲不同语言的实体之间的翻译,诸如人类与电脑之间。因为接口是一种间接手段,所以相比起直接沟通,会引致些额外负担。人类与电脑等信息机器或人类与程序之间的接口成为用户界面。电脑等信息机器硬件的接口叫硬件接口。电脑等信息机器软件组件间的接口叫软件接口。
软件接口
同一计算机不同功能层之间的通信规则称为接口。对协定进行定义的引用类型。其他类型实现接口,以保证它们支持某些操作。接口指定必须由类提供的成员或实现它的其他接口。与类相似,接口可以包含方法、属性、索引器和事件作为成员。
声明一个接口时,需要考虑一下几点: 接口主体只限于对方法、索引器以及属性的声明;接口成员是隐式公开的,如果对其显示指定访问级别,就会出现编译器错误;接口中不能包含字段、构造函数和常量等;接口中不能实现任何方法、属性或者索引器;在指定方法是,需要给出返回类型、名称和参数列表,然后分号结束。接口是专门被继承的。接口存在的意义也是被继承的。接口内可以定义属性(get和set的方法):如string color { get;set;}。
C#中的接口
(1)定义:接口是一种约束形式(用来定义一种程序的协定),其中包括成员定义,不包含成员实现的内容。
(2)目的:接口的主要目的是为不相关的类提供通用的处理服务,由于C#中只允许树形结构中的单继承,即一个类智能继承一个父类,所以接口是让一个类具有两个以上的基类的唯一方式。
(3)声明:接口声明的方式与声明类的方式相似,但使用的关键字是interface,而不是class。
(4)注意:接口只包含方法、属性、索引器和事件的签名。
(5)方法的实现是在实现接口的类中完成的。
(6)接口成员的定义:与类成员的定义相似,但是:不允许使用访问修饰符(public、private、protected、internal),所有的接口成员都必须是公共的。
(7)接口成员不能包含代码实体;
(8)接口成员不能定义字段成员;
(9)接口成员不能用关键字new、static、virtual、abstract或sealed来定义;原因:接口里面的方法都需要由外面接口实现去实现方法体,那么其修饰符必然是public。
(10)类型定义成员是禁止的。(隐藏继承基接口的成员,可以用关键字new来定义它们)。
(11)当一个接口实现另一个接口,这2个接口中有相同的方法时,可用new关键字隐藏父接口
(12)接口都是“虚的”不能被实例化,这也是接口中为什么不能包含字段(成员变量的原因);接口内的索引、属性、时间等只能有声明,不能再接口内实现;如果一个接口或者类从某一个接口继承,它将自动具有被集成这的特征(索引、属性、实践等)。
接口和抽象类的区别
接口用于规范,抽象类用于共性。抽象类是类,所以只能被单继承,但是接口却可以一次实现多个。接口中只能声明方法、属性、事件、索引器。而抽象类中可以有方法的实现,也可以定义非静态的类变量。抽象类可以提供某些方法的部分,接口不可以。抽象类的实例是它的子类给出的。接口的实例是实现接口的类给出的。在抽象类中加入一个方法,那么它的子类就同时有了这个方法。而在接口中加入新的方法,那么实现它的类就要重新编写。接口成员被定义为公共的,但抽象类的成员也可以是私有的、受保护的、内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)。此外接口不能包含字段、构造函数、析构函数、静态成员或常量。(在VS中有两个选项:实现接口、显示实现接口。实现接口就是我们平常理解的实现接口,而显示实现接口的话,实现方法是属于接口的,而不是属于实现类的。)
备注
接口可以是命名空间或类的成员,并且可以包含下列成员的签名:
方法属性索引器事件一个接口可以从一个或多个基接口继承。当基类型老板包含基类和接口是,基类必须是列表中的第一项。实现接口的类可以显示实现该接口的成员。显式实现的成员不能提供类实例访问,而只能提供接口实例访问。