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;
    }
}
相关推荐
左手の明天7 分钟前
SLIP 协议封装与解析详解:原理、C 代码与实战案例
linux·c语言·开发语言·c++
shuoshuohaohao12 分钟前
MyBatis 小知识点
java·spring·mybatis
海上小飞龙25 分钟前
【KMP算法-下篇】同一道题:Java 库函数 2600 微秒,手写 KMP 16 微秒
java·开发语言·算法
朝朝辞暮i42 分钟前
C++ 第 12 课:局部变量、作用域、变量生命周期
开发语言·c++·算法
狗凯之家源码网1 小时前
淘客口令落地页生成器 PHP 版深度评测
开发语言·php
画绛集美术1 小时前
本地化部署LLM用于美术史问答:一间美术教室的实践记录
开发语言·php
谢亮_vipxieliang1 小时前
泛型擦除、通配符与 PECS 一次讲透
java·面试
八解毒剂1 小时前
【计组】中央处理器CPU
java·开发语言·计算机组成原理
FakeOccupational2 小时前
【电路笔记 信号】DBPSK 波形查找表+脉冲成形(升余弦+根升余弦滤波)
开发语言·笔记
打工仔折腾 AI2 小时前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战