根据
原博概述,加自己理解,稍有改动。
1.理论概念
(1)接口类似于抽象基类,不能直接实例化接口。接口中的方法都是抽象方法,实现接口的任何非抽象类型都必须实现接口的所有成员。
当
显式实现该接口的成员时,实现的成员不能通过类实例访问,只能通过接口实例访问。
当
隐式实现该接口的成员时,实现的成员可以通过类实例访问,也可以通过接口实例访问,但是实现的成员必须是
公有的。
(2)接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型、静态成员等,
只能包含方法、属性、事件、索引等成员。
(3)接口成员是自动公开的,访问级别默认为public,且
不包含任何访问修饰符(如static,abstract,override,virtual)。
(接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义
)
(4)接口自身可从多个接口继承,类和结构可继承多个接口,但接口不能继承类。
(5)接口的名称一般以“I”作为首字母(非必须)。
(6)在声明接口成员的时候,不能为接口成员编写具体的代码,只需指明其成员名称和参数。
2.示例
public interface InputInterface { void SetDelegate (。。。参数。。。); void SetAttack (。。。参数。。。); } public class InputEvent : MonoBehaviour, InputInterface { void InputInterface.SetDelegate(。。。参数。。。) { 。。。显式实现接口。。。 } public void SetAttack (。。。参数。。。) { 。。。隐式实现接口。。。 } }
每个方法均有实现。这是我自己参与的一个demo里的部分代码,用到了接口和委托
显式实现接口与隐式实现接口:
interface IDemoInterface1 { void ReadThis1(); } interface IDemoInterface2 { void ReadThis2(); } class MainClass:IDemoInterface1,IDemoInterface2 { // 显式实现接口 void IDemoInterface1.ReadThis1() { Console.WriteLine ("This is IDemoInterface1"); } // 隐式实现接口,需加public!!! public void ReadThis2() { Console.WriteLine ("This is IDemoInterface2"); } public static void Main (string[] args) { MainClass m = new MainClass(); ((IDemoInterface1)m).ReadThis1(); m.ReadThis2(); } }
3.接口与类
一个类继承接口相当于它继承抽象类。类的继承不仅是说明继承,而且也是实现继承,而接口的继承就是说明继承。
接口和抽象类的区别。
接口用于规范,抽象类用于共性。
接口中只能声明方法,属性,事件,索引器。而抽象类中可以有方法的实现,也可以定义非静态的类变量。
抽象类是类,所以只能被单继承,但是接口却可以一次实现多个。
抽象类可以提供某些方法的部分实现,接口不可以。
抽象类的实例是它的子类给出的。接口的实例是实现接口的类给出的。
在抽象类中加入一个方法,那么它的子类就同时有了这个方法。而在接口中加入新的方法,那么实现它的类就要重新编写(这就是为什么说接口是一个类的规范了)。
接口成员被定义为公共的,但抽象类的成员也可以是私有的、受保护的、内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)。
此外接口不能包含字段、构造函数、析构函数、静态成员或常量。
接口用于规范,抽象类用于共性。
接口中只能声明方法,属性,事件,索引器。而抽象类中可以有方法的实现,也可以定义非静态的类变量。
抽象类是类,所以只能被单继承,但是接口却可以一次实现多个。
抽象类可以提供某些方法的部分实现,接口不可以。
抽象类的实例是它的子类给出的。接口的实例是实现接口的类给出的。
在抽象类中加入一个方法,那么它的子类就同时有了这个方法。而在接口中加入新的方法,那么实现它的类就要重新编写(这就是为什么说接口是一个类的规范了)。
接口成员被定义为公共的,但抽象类的成员也可以是私有的、受保护的、内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)。
此外接口不能包含字段、构造函数、析构函数、静态成员或常量。
C#中的接口和类有什么异同。
异:
不能直接实例化接口。
接口不包含方法的实现。
接口可以实现多继承,而类只能是单继承。
类定义可在不同的源文件之间进行拆分。
同:
接口、类和结构可从多个接口继承。
接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
接口可以包含事件、索引器、方法和属性。
不能直接实例化接口。
接口不包含方法的实现。
接口可以实现多继承,而类只能是单继承。
类定义可在不同的源文件之间进行拆分。
同:
接口、类和结构可从多个接口继承。
接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
接口可以包含事件、索引器、方法和属性。
一个类可以实现多个接口。