- 接口的定义:把公共实例(非静态)方法和属性组合起来,以封装特定功能的一个集合。
- 接口的成员只能包含:方法、属性、索引、事件声明。
- 接口的成员没有访问修饰符。
- 注意:接口不能单独存在,不能像实例化一个类那样实例化接口;接口不能包含实现其成员的任何代码,而只是定义成员本身;实现过程由实现接口的类来完成。
- 接口的名称一般以大写字母I开头。
- 一个类可以支持多个接口。
接口与抽象类之间的共同点:
- 抽象类和接口都包含可以由派生类继承的成员。
- 接口和抽象类都不能直接实例化,但可以声明这些类型的变量。
接口和抽象类之间的区别:
- 派生类只能继承一个基类,即只能直接继承一个抽象类(但可以用一个继承链包含多个抽象类)。相反,类可以使用任意多个接口。
- 如:class 类名:object ,Interface[,...] 类如果有父类,则先写父类名,再写接口名。除非没有父类,则只有接口名。
- 抽象类可以拥有抽象成员(没有代码体,且必须在派生类中实现,除非继承类为抽象类)和非抽象成员(他们拥有代码体,也可以是虚拟的,这样就可以在派生类中重写)
- 接口成员必须都在使用接口的类上实现--他们没有代码体。
- 接口成员都是公共的,但抽象类的成员可以使私有的(只要他们不是抽象的)、受保护的、内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或者派生类中访问)。
- 此外,接口中不能包含字段、构造函数、析构函数、静态成员或变量。
显示实现接口:
Interface IJieKou //定义接口 {
} class MyClass1:IJieKou {
} class MyClass2:IJieKou { //显示实现接口,不能有public修饰符。实现的方面名前有“接口名:”。
} | 接口的使用: MyClass myClass1 = new MyClass1(); myClass1.Func(); IJiekou iJiekou = myClass1; iJiekou.Func(); Console.WriteLine(); MyClass2 myClass2 = new MyClass2(); //此时用myClass2 是没有办法访问到 FunC()方法。 iJieKou = myClass2; iJiekou.Func(); Console.ReadKey(); //在IL代码中,显示实现的接口方法,是私有的。 //实现方法:接口名.方法名()。 |