接口是什么

接口是一种用来定义程序的协议,它描述可属于任何类或结构的一组相关行为。接口可有方法、属性、事件和索引器或这四种成员的任何组合类型,但不能包含字段。接口只包含了成员的声明,在继承的类中进行实现。

接口的特点

接口只做声明。
所有接口成员的默认访问类型都是public。
接口不能直接实例化。
必须实现接口的所有方法。
C#是单继承,利用接口可以实现多继承。

接口的声明

public interface Animalone
{        //接口方法不能用修饰符修饰
    void ToSpeak();
}

接口的实现

public class Catone : Animalone
{        
    public void ToSpeak()
    {
        Console.Write("喵喵喵\r\n");
    }
}
public class Dogone : Animalone
{
    public void ToSpeak()
    {
        Console.Write("汪汪汪\r\n");
    }
}    
public class birdone : Animalone
{        
    public void ToSpeak()
    {
        Console.Write("喳喳喳\r\n");
    }
}

接口的继承

//接口继承
//C# 单继承,使用接口可以继承多个基类
public interface Animaltwo : Animalone
{        
    void EatFood();
}    
//继承子接口时,要实现所有接口的方法
public class Cattwo : Animaltwo
{        
    public void EatFood()
    {
        Console.Write("猫粮\r\n");
    }        
    public void ToSpeak()
    {
        Console.Write("喵喵喵\r\n");
    }
}

显示接口的实现

//显示接口实现
interface AnimalThree 
{        
    void Move();
}

interface Animalfour
{        
    void Move();
}    
public class Cat : AnimalThree, Animalfour
{        
    void AnimalThree.Move()
    {
        Console.Write("run\r\n");
    }        
    void Animalfour.Move()
    {
        Console.Write("swarm\r\n");
    }
}
完整代码
```c#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestInterface
{    
    //接口
    //定义一个接口,只能做方法声明,继承自接口的类,必须实现接口方法
    public interface Animalone
    {        
        //接口方法不能用修饰符修饰
        void ToSpeak();
    }    
    public class Catone : Animalone
    {        
        public void ToSpeak()
        {
            Console.Write("喵喵喵\r\n");
        }
    }    
    public class Dogone : Animalone
    {
        public void ToSpeak()
        {
            Console.Write("汪汪汪\r\n");
        }
    }
    public class birdone : Animalone
    {
        public void ToSpeak()
        {
            Console.Write("喳喳喳\r\n");
        }
    }    
    public class zooone 
    {
        public void Speak(Animalone animals)
        {
            animals.ToSpeak();
        }
    }    
    //接口继承
    //C# 单继承,使用接口可以继承多个基类
    public interface Animaltwo : Animalone
    {        
        void EatFood();
    }    //继承子接口时,要实现所有接口的方法
    public class Cattwo : Animaltwo
    {
        public void EatFood()
        {
            Console.Write("猫粮\r\n");
        }        
        public void ToSpeak()
        {
            Console.Write("喵喵喵\r\n");
        }
    }    
    public class zootwo
    {
        public void EatFood(Animaltwo animals)
        {
            animals.EatFood();
        }        
        public void Tospeak(Animaltwo animals)
        {
            animals.ToSpeak();
        }
    }    
    //显示接口实现
    interface AnimalThree 
    {        
        void Move();
    }

    interface Animalfour
    {        
        void Move();
    }    
    public class Cat : AnimalThree, Animalfour
    {        
        void AnimalThree.Move()
        {
            Console.Write("run\r\n");
        }        
        void Animalfour.Move()
        {
            Console.Write("swarm\r\n");
        }
    }    
    class Program
    {
        static void Main(string[] args)
        {
            zooone z = new zooone();
            z.Speak(new Catone());
            z.Speak(new Dogone());
            z.Speak(new birdone());

            zootwo ztwo = new zootwo();
            ztwo.EatFood(new Cattwo());
            ztwo.Tospeak(new Cattwo());
            

            Cat cat = new Cat();
            AnimalThree three = cat;
            three.Move();
            Animalfour four = cat;
            four.Move();

            Console.Read();
        }
    }
}

参考资料

https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/interfaces/
C# 接口《通俗解释》https://www.cnblogs.com/hamburger/p/4681681.html