当前位置: 首页 > news >正文

C# 类实现接口(Interface) 多态 多继承

什么是接口

接口在程序中起到规范代码的作用,例如:电脑的USB接口,这些都是已经定义好的了,制造鼠标键盘U盘等厂家就按这种规格做出来的成品在任何电脑上都可以直接使用,而不需要进行适配,这就是规范的使用了接口


接口的特点

  • 类之间的继承关系仅支持单重继承,使用进口可以多继承
  • 一个类可以实现继承很多接口
  • 接口不能有方法体
  • 接口的访问修饰符 只能是 public
  • 使用接口,必须实现类的方法
  • 接口不能实例化成对象
  • 接口不能继承类

接口写法

通常是以 I 开头,再加上其他的单词构成

定义接口

 interface  ITest //接口名
{
    void Dog();
    //默认是public 不能修改 不能有方法体
}

继承接口

public class Zoo : ITest 
{
public void Dog()
        {
//类必须实现接口的方法
            Console.WriteLine("汪汪汪");
        }

}

使用接口

 InterfaceTest f = new Test();
  f.Dog();
  //接口不能实例化

运行结果:

汪汪汪


接口的多继承

类只能单继承,而接口可以多继承,多个接口使用" , " 号分割

  internal interface ICar
    {
        void Do();
      
    }
 internal interface InterfaceTest
    {
        void Dog();
    }
 public class Test : InterfaceTest, ICar
    {

        public void Dog()
        {
       
            Console.WriteLine("InterfaceTest接口");
        }

       public void   Do()
        {
          Console.WriteLine("我是Cre接口");
        }
  

    }

也可以继承一个类然后再继承多个接口

如果类和接口需要一起继承,那么必须把 父类 放在第一位,后面的接口可以不分顺序

  public class Test : 类名,接口,接口,接口
    {
    } 

接口显示调用

假如Zoo类中有一个方法叫Dog ,而接口中有一个方法也叫Dog,这样在实现接口时候就会报错,因为两个方法重名了,这时候就可以使用接口显示的写法了

 public class Test : InterfaceTest
    {

        public void Dog()
        {
       
            Console.WriteLine("类自带的方法");
        }

         void InterfaceTest.Dog()
        {
            
            Console.WriteLine("实现接口的方法");
        }


    }

需要注意的是,不能添加访问修饰符,默认即public

 InterfaceTest f = new Test();
            f.Dog();//使用接口

            Test t = new Test();
            t.Dog();//使用自己的

运行结果:

实现接口的方法
类自带的方法


什么情况使用接口

使用接口可以很好的规范代码的写法,如果有多个人开发一个程序,需要创建很多类,而类做的事又很相似,那么就可以定义一个接口来规范,同时也让程序更好的扩展

例:最近有一个程序需要抓取各个视频平台的视频,抖Y K手…等等各大视频平台还有部分作者的头像信息…主页信息等,每一个视频平台都创建了一个类,共有5人开发,而他们共同做的内容是抓取视频,那么就可以定义一个视频的接口,每一个类都必须实现这个抓取视频的方法,而后面新来的程序员,或其他平台,都继承这个接口,并且都要实现方法,这样就很好的规范了代码的编写。

相关文章:

  • 量子计算(八):观测量和计算基下的测量
  • 2022年第三季度泛出行行业洞察:泛出行行业正在经历数智化升级的关键时期,用户规模保持平稳增长,行业整体良性发展
  • 配置FTP站点操作步骤—图解
  • lazada买家订单导出
  • MySQL事务管理 MVCC,隔离性详解
  • Docker入门教程(详细)
  • 免费申请Jetbrains全家桶
  • C语言中字符串相关操作函数
  • linux篇【11】:linux下的线程<后序>
  • 让学前端不再害怕英语单词(二)
  • Java培训教程给bean的属性赋值
  • Socket套接字(Java)
  • 机器人工程考研难易主观感受和客观数据
  • Bio-Helix丨Bio-Helix艾美捷Ponceaus S染色液说明书
  • 【Spring(四)】Spring基于注解的配置方式
  • #Java异常处理
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • [NodeJS] 关于Buffer
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Apache的基本使用
  • Hexo+码云+git快速搭建免费的静态Blog
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • jdbc就是这么简单
  • js操作时间(持续更新)
  • js中forEach回调同异步问题
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • oldjun 检测网站的经验
  • storm drpc实例
  • Unix命令
  • Vue2 SSR 的优化之旅
  • 技术发展面试
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端技术周刊 2019-02-11 Serverless
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 项目管理碎碎念系列之一:干系人管理
  • linux 淘宝开源监控工具tsar
  • ​第20课 在Android Native开发中加入新的C++类
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • $.ajax()方法详解
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (2)STL算法之元素计数
  • (9)STL算法之逆转旋转
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (七)Knockout 创建自定义绑定
  • (三)模仿学习-Action数据的模仿
  • (一)Thymeleaf用法——Thymeleaf简介
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (正则)提取页面里的img标签
  • (转载)Linux网络编程入门