一、定义接口
    类之间的继承关系仅支持单重继承,而接口是为了实现多重继承关系设计的;一个类能同时实现多个接口,还能在实现接口的同时再继承其他类,并且接口之间也可以继承,无论是表示类之间的继承还是类实现接口、接口之间的继承,都使用“:”来表示。

    1. interface 接口名称
    2. {
    3. 接口成员;
    4. }

    1) 接口名称
    通常是以 I 开头,再加上其他的单词构成。例如创建一个计算的接口,可以命名为 ICompute。
    2) 接口成员
    接口中定义的成员与类中定义的成员类似
    接口中定义的成员必须满足以下要求:

    • 接口中的成员不允许使用 public、private、protected、internal 访问修饰符。
    • 接口中的成员不允许使用 static、virtual、abstract、sealed 修饰符。
    • 在接口中不能定义字段。
    • 在接口中定义的方法不能包含方法体。
    interface ICompute
    {
        int Id { get; set; }
        string Name { get; set; }
        void Total();
        void Avg();
    }
    //接口中的方法并没有具体的内容,直接调用接口中的方法没有任何意义
    

    在 C# 语言中规定不能直接创建接口的实例,只能通过类实现接口中的方法。

    二、实现接口的两种方式:显示实现和隐式实现接口
    接口的实现实际上和类之间的继承是一样的,也是重写了接口中的方法,让其有了具体的实现内容。
    在类中实现一个接口时必须将接口中的所有成员都实现,否则该类必须声明为抽象类,并将接口中未实现的成员以抽象方式实现。

    //以抽象方式实现接口中的成员是指将接口中未实现的成员定义为抽象成员
    
    interface Itest {
        string name {get; set;}
        void Print();
    }
    
    abstract class Test : ITest {
        public abstract name {get; set;}
        public abstract void Print();
    }
    //从上面的代码可以看出,在实现类 Test 中将未实现的属性和方法分别定义为抽象属性和抽象方法,并将实现类定义为抽象类。
    //这是一种特殊的实现方式,在实际应用中通常是将接口中的所有成员全部实现
    

    在实现接口的成员时有两种方式,一种是隐式实现接口成员,一种是显式实现接口成员。
    在实际应用中隐式实现接口的方式比较常用,由于在接口中定义的成员默认是 public 类型的,隐式实现接口成员是将接口的所有成员以 public 访问修饰符修饰。
    显式实现接口是指在实现接口时所实现的成员名称前含有接口名称作为前缀。
    需要注意的是使用显式实现接口的成员不能再使用修饰符修饰,即 public、abstract、virtual、 override 等。