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;
    }
}
相关推荐
Tsuki_tl几秒前
【总结】Java的线程状态
java·后端·面试·多线程·并发编程·线程状态
苦逼的猿宝6 分钟前
springboot的网页时装购物系统
java·毕业设计·springboot·计算机毕业设计
WL_Aurora7 分钟前
Java多线程编程基础与实践
java·多线程
数智工坊10 分钟前
PyCharm 运行 Python 脚本总自动进 Test 模式?附 RT-DETRv2 依赖缺失终极排坑
开发语言·ide·人工智能·python·pycharm
再写一行代码就下班11 分钟前
根据给定word模板,动态填充指定内容,并输出为新的word文档。(${aa}占位符方式且支持循环动态表格)
java·开发语言
七夜zippoe12 分钟前
DolphinDB流数据表:创建与订阅
开发语言·订阅··dolphindb·数据表
西安邮电大学19 分钟前
SpringMVC执行流程
java·后端·spring·面试
魔法阵维护师21 分钟前
从零开发游戏需要学习的c#模块,第十八章(2D 碰撞检测与金币收集)
学习·游戏·c#
i220818 Faiz Ul21 分钟前
智慧养老平台|基于SprinBoot+vue的智慧养老平台系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·智慧养老平台
AI砖家21 分钟前
每日一个skill:web-artifacts-builder,构建复杂 Claude.ai HTML Artifact 的生产力工具包
java·前端·人工智能·python