定义:
接口是指定一组函数成员而不实现成员的引用类型,其他类型-类和接口可以实现接口。
- 接口是一个引用类型,通过接口可以实现多重继承。
- C#中接口的成员不能有new、public、protected、internal、private等修饰符。
- 接口中只能声明"抽象"成员(所以不能直接下一步对接口进行实例化(即不能使用new操作符声明一个接口的实例对 象)),而不能声明共有的域或者私有的成员变量。
- 接口声明不包括数据成员,只能包含方法、属性、事件、索引等成员。
- 接口名称一般都以“I”作为首字母(当然不这样声明也可以),这也是接口和类的一个区别之一。
- 接口成员的访问级别是默认的(默认为public),所以在声明时不能再为接口成员指定任何访问修饰符,否则 编译器会报错。
- 接口成员不能有static、abstract、override、virtual修饰符,使用new修饰符不会报错,但会给出警告说不需要关键字new。
- 在声明接口成员的时候,不准为接口成员编写具体的可执行代码,也就是说,只要在对接口进行声明时指明接口的成员名称和参数就可以了。
- 接口一旦被实现,实现类必须实现接口中的所有成员,除非实现类本身是抽象类(通过具体的可执行代码实现接口抽象成员的操作)。
注意:每个类只能继承一个类、但是可以实现多个接口。
理解接口
接口用得好坏,取决于水平。但是初步的理解接口还是不难的。首先记住:类是对象的抽象,接口是方法的抽象。类的概念就不说了。单说接口吧。如果方法跨越不同类的对象,可使用接口,即然你语法很熟了,我就不去写代码了。
举个例子吧,一个外地的朋友突然来看你,你常常会问“你是坐车来的还是坐飞机来的?”
那么可以定义了三个类:飞机类,船类,车类(当然,你也可以进一步把这三个类抽象为一个类,运输类。但为了说明接口,暂不作进一步抽象)。定义一个接口:客运。
三种类的对象都可以各自去实现“客运”这一接口,当然它们的实现方式各不相同。
再举一例,鸟类,飞机类,神仙类都能“飞”。这三种类都以各自的方式去实现“飞”这一接口的。
当然这两个例子只能浅浅的说明接口,以后你在运用时去深入理解吧。但记住:接口是是方法的抽象。如果方法跨越不同类的对象,可使用接口。
我们定义一个接口
public interface IBark
{
void Bark();
}
再定义一个类,继承于IBark,并且必需实现其中的Bark()方法
public class Dog:IBark
{
public Dog()
{}
public void Bark()
{
Consol.write("汪汪");
}
}
然后,声明Dog的一个实例,并调用Bark()方法
Dog 旺财=new Dog();
旺财.Bark();
接口的继承
继承其他的接口,就具备了其他接口声明的方法。 并且可以扩充自己的方法定义。
遵守该接口的类,需要将其所有的接口和继承的接口中的方法定义都实现。
public interface IBossPort : IEnemyPort
{
void CallHelp();
}
接口的作用
继承"基类"跟继承"接口"都能实现某些相同的功能,但有些接口能够完成的功能是只用基类无法实现的
1.接口用于描述一组类的公共方法与公共属性. 它不实现任何的方法或属性,只是告诉继承它的类
至少要实现哪些功能,继承它的类可以增加自己的方法.
2.使用接口可以使继承它的类: 命名统一/规范,易于维护.比如: 两个类 "狗"和"猫",如果它
们都继承了接口"动物",其中动物里面有个方法Behavior(),那么狗和猫必须得实现Behavior()方法,
并且都命名为Behavior这样就不会出现命名太杂乱的现象.如果命名不是Behavior(),接口会约束
即不按接口约束命名编译不会通过.
3.提供永远的接口。 当类增加时,现有接口方法能够满足继承类中的大多数方法,没必要
重新给新类设计一组方法,也节省了代码,提高了开发效率.