一、接口是什么
接口(Interface)就是一份行为规范,它定义“能做什么”,但不管“怎么做”。
"接口定义了一套规范或契约,规定类必须做什么,但不关心具体怎么做"
二、示例
假设我们要设计一些“能发出声音”的东西,比如狗、猫、汽车。
我们先定义一个接口:
public interface ISound
{
    void MakeSound(); // 定义一个行为:发出声音
}这里的接口只是说明:
“谁要实现我(ISound),就必须写出一个 MakeSound() 方法。”
不同类实现接口:
public class Dog : ISound
{
    public void MakeSound()
    {
        Console.WriteLine("汪汪!");
    }
}
public class Car : ISound
{
    public void MakeSound()
    {
        Console.WriteLine("嘀嘀!");
    }
}使用接口:
ISound s1 = new Dog();
ISound s2 = new Car();
s1.MakeSound(); // 输出:汪汪!
s2.MakeSound(); // 输出:嘀嘀!无论是狗还是车,只要实现了 ISound, 我们就能用 ISound 这个“统一的接口”去调用它们的 MakeSound() 方法。
声明接口的语法
//"接口名称应以字母 I 开头,以指示该类型是接口。"
[访问修饰符] interface I接口名
{
    // 接口不能包含字段
    // 不能有:int x;
    
     // 属性也可以定义在接口中
     string 名称 { get; set; }
    
    // 编译错误:接口不能包含构造函数
    // public IExample() { }
    
    // 只有方法声明,没有实现
    void 绘制();
    string 获取颜色();
    // 接口不能包含具体实现
    // 不能有:void 方法() { Console.WriteLine("实现"); }
    
    
    // 只能包含这些成员:
    void Method();          // 方法
    string Property { get; } // 属性
    event EventHandler Event; // 事件
}重点理解:
💡 生活化理解:
接口就像插头标准:
你只要做出符合“三孔插头标准”的电器,
就能插到任何“三孔插座”上使用。
插座不关心你是“电风扇”还是“电脑”,只要“符合标准”就行。
示例1. 电源插座比喻
// 插座接口定义了一套规范
public interface I电源插座
{
    void 供电();  // 所有电器都要实现这个功能
}
// 不同电器实现相同的插座接口
public class 电视机 : I电源插座
{
    public void 供电()
    {
        Console.WriteLine("电视机获得电力,显示画面");
    }
}
public class 电冰箱 : I电源插座
{
    public void 供电()
    {
        Console.WriteLine("电冰箱获得电力,开始制冷");
    }
}示例2. USB接口比喻
// USB接口标准
public interface IUSB设备
{
    void 传输数据();  // 所有USB设备都要实现
    void 连接电脑();  // 统一的行为规范
}
public class U盘 : IUSB设备
{
    public void 传输数据()
    {
        Console.WriteLine("U盘读写文件数据");
    }
    
    public void 连接电脑()
    {
        Console.WriteLine("U盘通过USB接口连接");
    }
}
public class 鼠标 : IUSB设备
{
    public void 传输数据()
    {
        Console.WriteLine("鼠标传输移动和点击数据");
    }
    
    public void 连接电脑()
    {
        Console.WriteLine("鼠标通过USB接口连接");
    }
}示例3:一个类只能继承一个父类
public abstract class 动物
{
    public abstract void 叫();
    public void 呼吸()  // 可以有具体实现
    {
        Console.WriteLine("呼吸");
    }
}
// 问题:C#不支持多继承,一个类只能继承一个父类示例3:一个类可以实现多个接口!
// 接口只包含规范,不包含实现
public interface I会叫的动物
{
    void 叫();  // 只有声明,没有实现
}
public interface I会飞的动物
{
    void 飞();
}
public interface I会游泳的动物
{
    void 游泳();
}
// 一个类可以实现多个接口!
public class 鸭子 : I会叫的动物, I会飞的动物, I会游泳的动物
{
    public void 叫()
    {
        Console.WriteLine("嘎嘎!");
    }
    
    public void 飞()
    {
        Console.WriteLine("鸭子扑腾翅膀飞行");
    }
    
    public void 游泳()
    {
        Console.WriteLine("鸭子在水中游泳");
    }
}