接口是行为的抽象表现
关键字 interface
接口申明的规范
1.不包含成员变量
2.只包含,方法,属性,索引器,事件
3.成员不能被实现
4.成员可以不用写访问修饰符,不能是私有的(不写默认是public也可以写protected)
5.接口不能继承类,但是可以继承另一个接口
接口的使用规范
1.类可以继承多个接口
2.类继承接口后,必须实现接口中所有成员
接口是用来继承的
接口不能被实例化,但是可以作为容器存储对象
interface I接口名
{
}
帕斯卡命名法前面加个I
实现的接口函数,可以加virtual修饰为虚函数再让继承该类的子类重写
显示实现接口
(一般)当一个类继承两个接口
但是接口中存在着同名方法时用显示实现接口
interface IAtk
{
void Atk();
}
interface ISuperAtk
{
void Atk();
}
class Player : IAtk, ISuperAtk
{
//public void Atk()//这样写两个接口的Atk都会执行一个逻辑
//{
//}
void IAtk.Atk()
{
}
void ISuperAtk.Atk()
{
}
public void Atk()//再加一个Atk方法这个就是Player自己的方法
{ //和继承的接口的两个ATk没有关系
}
}
class Program
{
public static void Main()
{
IAtk atk = new Player();
ISuperAtk superAtk=new Player();
atk.Atk();
superAtk.Atk();//这样可以根据父类容器不同 有不同的方法
Player player = new Player(); //但是当用Player装player时用不了继承的接口方法
(player as IAtk).Atk(); //只有把player转成父类 或者父类接口去装子类来用
//这里就是调用的IAtk.Atk()这个方法
(player as Player).Atk();//自己的方法
}
}
interface IUsb
{
void SendMessage();
}
class StorageDevice : IUsb
{
public string Name { get; set; }
public virtual void SendMessage()
{
}
}
class MovileDisk : StorageDevice
{
public MovileDisk(string Name)
{
this .Name = Name;
}
public override void SendMessage()
{
Console.WriteLine(Name + "传输数据");
}
}
class UDisk : StorageDevice
{
public UDisk(string Name)
{
this.Name = Name;
}
public override void SendMessage()
{
Console.WriteLine(Name + "传输数据");
}
}
class Mp3 : IUsb
{
public string Name { get; set; }
public Mp3(String name)
{
this .Name = name;
}
public void SendMessage()
{
Console.WriteLine(Name + "传输数据");
}
}
class Computer
{
public IUsb usb;
}
class Program
{
public static void Main()
{
Computer computer = new Computer();
MovileDisk movileDisk = new MovileDisk("移动硬盘");
UDisk uDisk = new UDisk("U盘");
Mp3 mp3 = new Mp3("MP3");
computer.usb = movileDisk;
computer.usb .SendMessage();
computer.usb = uDisk;
computer.usb .SendMessage();
computer .usb = mp3;
computer.usb .SendMessage();
}
}