接口
概念:行为的抽象规范。
关键字:interface
声明:
- 不包含成员变量;
- 只包含方法、属性、索引器、事件 ;
- 成员方法不能被实现;
- 不写访问修饰符,默认是public,不能写private;
- 接口不能继承类,能继承另一个接口;
语法:
interface 接口名
{
}
实例:
interface IFly
{
void Fly();
string Hi { get; set; }
int this[int index] { get; set; }
event Action dosomething;
}
命名:帕斯卡命名法,首字母加个I
使用:
- 接口是用来继承的;
- 类可以继承1个类,多个接口;
- 类继承接口后,必须实现接口的所有成员,并且必须是public;
- 接口不能被实例化,但可以作为容器存储对象;
- 实现的接口函数,可以加virual在子类中重写;
- 接口遵循里氏替换原则;
- 接口可以继承接口,继承后不需要实现其中的内容,等到类继承接口后,类去实现所有的内容。
实例:
class Animal { }
class Person : Animal, IFly
{
//继承接口的类可以在方法中写virtual,当被子类继承时可以重写该方法
public virtual void Fly() { }
public string Hi { get; set; }
public int this[int index]
{
get { return 0; }
set { }
}
public event Action dosomething;
}
显示实现接口:
当一个类继承两个接口,且两个接口有同名的方法时使用显示实现接口。
显示实现接口时不能写访问修饰符。
实例:
interface IAtk
{
void Atk();
}
interface ISuperAtk
{
void Atk();
}
class Player:IAtk,ISuperAtk
{
//显示实现接口就是用 接口.行为名 实现区分不同接口的同名方法
void IAtk.Atk()
{
Console.WriteLine("接口IAtk实现的方法");
}
void ISuperAtk.Atk()
{
}
public void Atk()
{
Console.WriteLine("Player的方法");
}
}