一.概念
接口是行为的抽象规范
关键字:interface
申明规范:
不能包含成员变量.
只含方法,属性,索引器,事件.
成员不能被实现.
可以不用写访问修饰符,默认public,但不能是private.
接口不能继承类,但可以继承另一个接口.
使用规范:
类可以继承多个接口.
类继承接口后,必须实现接口中所有成员,且public.
特点:
和类的申明类似.
接口是用来继承的.
接口不能被实例化,但可以作为容器存储对象(里氏替换).
二.接口的申明
接口是抽象行为的基类.
一般I开头
interface IFly
{
public void Fly();
string Name//属性也不能被实现!只能写成自动属性
{
get;
set;
}
//索引器,也不能实现
int this[int index]
{
get;
set;
}
event Action doSomething;
}
三.使用接口
class Animal
{
}
class Person : Animal,IFly//继承了一个类后,又继承接口,接口可以有多个
{
//实现接口方法一定要public(若接口不是protected)!
public Fly()
{
}
// public virtual Fly()
//{
// 这样实现接口函数也是可以的,希望子类可以重写
// }
public string Name
{
get;
set;
}
public int this[index]
{
get;
set;
}
public event Action doSomething;
}
//使用里氏转换原则,用接口容器装子类
IFly f = new Person();
四.作用
接口是行为的抽象规范.
例如人和鸟都继承自动物类,但不是所有动物类都能飞,将飞的方法写在动物类就不太合适,则可以让鸟继承动物类,又继承飞这样行为的接口.飞机不是动物类,但也可以继承飞的接口.则可以用飞接口,里氏转换存鸟和飞机.
五.接口可以继承接口
接口可以继承多个接口.
接口继承接口可以不用去实现.
等到类继承接口后,类要去实现所有内容.
六.显示实现接口
当一个类继承了两个接口,而两个接口存在同名方法.
显示继承接口不能写访问修饰符.
若接口成员protected,则也必须显示实现.
interface IAtk
{
public void Hit();
}
interface IDeffend
{
public void Hit();
}
class Player : IAtk,IDeffend
{
//这种写法,两个接口的方法就之后有一种表现,不合适
// public void Hit()
//{
//
// }
void IAtk.Hit()
{
}
void IDeffend.Hit()
{
}
//甚至可以写一个自己的
public void Hit()
{
}
}
//使用时
PLayer p = new Player();
//此时p不能使用Hit()方法了(除法像上文那样Player有个自己的hit),
//只能先转成父类(接口)才能使用
(p as IAtk).Hit();
参考资料<唐老狮C#教程>