C#多态_接口

接口是行为的抽象表现

关键字 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();
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值