C# 接口(interface 定义接口的关键字)

目录

使用接口案例

接口继承

练习


定义一个接口,在语法中与定义一个抽象类是没有区别的,但是不允许 提供接口中任意成员的实现方式,一般接口只会包含方法 、索引器和事件的声明, 不允许声明成员的修饰符 , public都不行 。因为接口总是共有的 ,也不能声明虚拟和静态。

接口不会有构造函数 也不能有数据字段

接口不能被实例化

使用接口案例

定义接口 IFiy

cs 复制代码
//interface 定义接口的关键字
internal interface IFiy
{
    //定义没有实现的方法
    //飞  可以有参数
    void Fly();
    //攻击
    void Attack();

}

定义一个Plane飞机类继承 IFiy接口

cs 复制代码
internal class Plane : IFiy
{
    public void Attack()
    {
        Console.WriteLine("飞机在空中战斗");
    }

    public void Fly()
    {
        Console.WriteLine("飞机在空中飞");
    }
}

定义一个 Brid鸟类继承 IFiy接口,接口可以被多个类继承

cs 复制代码
internal class Brid : IFiy
{
    public void Fly()
    {
        Console.WriteLine("小鸟在空中飞");
    }

    public void Attack()
    {
        Console.WriteLine("小鸟在空中捕猎");
    }
}

主函数

cs 复制代码
static void Main(string[] args)
{
    // 接口不会有构造函数  也不能有数据字段
    Plane plane = new Plane();
    plane.Fly();


    //接口不能被实例化;
    //使用接口的具体操作
    IFiy fiy;
    fiy = new Plane();
    fiy.Fly();// 飞机的飞


    fiy = new Brid();
    fiy.Fly();//小鸟的飞

    //使用接口创建一个变量  写了两个构造 这在编程中叫做多态  
//因为fiy发生了变化 之前是飞机  后面变成了小鸟  所以他的形态是可以变化的 这种语法在C#中叫做  多态
}

接口继承

接口与接口之间的继承

cs 复制代码
internal interface Interface1
{
    void YY();
}
cs 复制代码
internal interface Interface2
{
    void cy();
}
cs 复制代码
//接口与接口之间的继承
internal interface Interface3 : Interface1 , Interface2
{
    void Show();
}
cs 复制代码
 //接口Interface3中含有三种方法,一个自己的两个继承的
internal class Class1 : Interface3
 {
     public void cy()
     {
         throw new NotImplementedException();
     }

     public void Show()
     {
         throw new NotImplementedException();
     }

     public void YY()
     {
         throw new NotImplementedException();
     }
 }
cs 复制代码
//定义一个抽象类模板
internal abstract class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Addres {  get; set; }
    public string Phone {  get; set; }
    public int  Age { get; set; }  
}
cs 复制代码
 // ,Interface1 接口继承
 //在继承中 除了第一个要继承的类或则是接口使用:  后面再继承的接口要使用逗号隔开

 // 类是不允许多继承的  每个类只能有一个基类
 internal class Yse : Student, Interface1 , Interface2
 {
     public Yse(string name) 
     {
         Name = name;
     
     }
     public void YY()
     {
         Console.WriteLine($"{Name}是会游泳的学生");
     }

     public void cy()
     {
         Console.WriteLine($"{Name}会唱歌");
     }
 }
cs 复制代码
internal class No : Student , Interface2
{
    public void cy()
    {
        Console.WriteLine($"{Name}会跳舞");
    }
}
cs 复制代码
static void Main(string[] args)
{
    Yse y = new Yse("张三");
    y.Name = "张三";
    y.YY();
    y.cy();
                
    Interface1 i;
    i = new Yse("张三");
    i.YY();

    // 接口的多态
    Interface1 i1;
    i1 = new Yse("李四");
    i1.YY();

}

练习

定义一个接口用来做数学运算 既可以做加法也可以做减法 通过具体的数学操作类(加法类 减法类)去实现接口中的方法 完成操作 提示:运用接口的多态性

主函数

cs 复制代码
internal class Program
{
    static void Main(string[] args)
    {
        Math m;
        m = new Add();
        Console.WriteLine(m.Maths(10,20)); // 30  加法  

        m = new Sub();
        Console.WriteLine(m.Maths(10,20)); // -10  减法
    }
}

创建一个Math接口

cs 复制代码
internal interface Math
{
    double Maths(double a , double b);
    
}

加法类

cs 复制代码
internal class Add :Math
{
    public double Maths(double a,double b)
    {
        return a + b;
    }
}

减法类

cs 复制代码
internal class Sub : Math
{
    public double Maths(double a, double b)
    {
        return a - b;
    }
}
相关推荐
yzx9910131 分钟前
小程序开发APP
开发语言·人工智能·python·yolo
一只叫煤球的猫6 分钟前
🕰 一个案例带你彻底搞懂延迟双删
java·后端·面试
最初的↘那颗心7 分钟前
Flink Stream API 源码走读 - print()
java·大数据·hadoop·flink·实时计算
啊阿狸不会拉杆38 分钟前
《算法导论》第 32 章 - 字符串匹配
开发语言·c++·算法
JH30731 小时前
Maven的三种项目打包方式——pom,jar,war的区别
java·maven·jar
带刺的坐椅2 小时前
轻量级流程编排框架,Solon Flow v3.5.0 发布
java·solon·workflow·flow·solon-flow
David爱编程2 小时前
线程调度策略详解:时间片轮转 vs 优先级机制,面试常考!
java·后端
武当豆豆2 小时前
C++编程学习(第25天)
开发语言·c++·学习
阿冲Runner3 小时前
创建一个生产可用的线程池
java·后端
写bug写bug3 小时前
你真的会用枚举吗
java·后端·设计模式