【29】C# 接口

接口是什么

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

接口的特点

接口只做声明。
所有接口成员的默认访问类型都是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");
        }
    }

完整代码

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();
        }
    }
}
3956112-ad5a2af03dbdc4cb.png
2018-12-06_235846.png

参考资料

https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/interfaces/

C# 接口《通俗解释》https://www.cnblogs.com/hamburger/p/4681681.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值