C# 图解教程 第5版 —— 第16章 接口

文章目录

    • 16.1 什么是接口
    • 16.2 声明接口
    • 16.3 实现接口
    • 16.4 接口是引用类型
    • 16.5 接口和 as 运算符
    • 16.6 实现多个接口
    • 16.7 实现具有重复成员的接口
    • 16.8 多个接口的引用(*)
    • 16.9 派生成员作为实现(*)
    • 16.10 显示接口成员实现
    • 16.11 接口可以继承接口
    • 16.12 不同类实现一个接口的示例(*)

16.1 什么是接口

​ 接口是声明一组函数成员而不进行实现的引用类型,只能用类和结构来实现接口。

使用 IComparable 接口的示例

​ Array 类的 Sort 方法依赖于 IComparable 接口,其声明在 BCL 中,只包含唯一的 CompareTo 方法。图 16.1 中灰色表示该方法目前未实现。

image-20231116142404013 image-20231116142457254
图16.1 IComparable 接口

​ 调用 CompareTo 方法时,应该返回如下值:

  1. 负数:当前对象 < 参数对象。
  2. 正数:当前对象 > 参数对象。
  3. 0:两个对象相等。

​ 为自定义类实现 IComparable 接口后,就可以使用 Array.Sort 方法进行排序:

image-20231116142909330 image-20231116142922644
图16.2 在 MyClass 类中实现 IComparable 接口

16.2 声明接口

  1. 接口声明不能包含以下成员:
    • 数据成员。
    • 静态成员。
  2. 接口声明只能包含如下类型的非静态成员:
    • 方法。
    • 属性。
    • 事件。
    • 索引器。
  3. 函数声明不能包含任何实现代码,而是使用分号代替函数主体。
  4. 接口名称必须从大写的 I 开始。
  5. 可以声明分部接口。
image-20231116143215274
  1. 接口和接口成员的访问性有一些不同:
    • 接口声明可以有任何的访问修饰符。
    • 接口成员是隐式 public,不能有任何访问修饰符。
image-20231116143358650

16.3 实现接口

​ 要实现接口,类和结构必须:

  1. 在基类列表中包含接口名称。
  2. 为每一个接口成员提供实现。
image-20231116143618866

​ 重要事项如下:

  1. 必须实现接口的所有成员。
  2. 基类名称必须放在所有接口之前。
image-20231116143605165

16.4 接口是引用类型

​ 不能通过类对象的成员访问接口,只能通过将类对象引用强制转换为接口类型来获取接口引用。注意:接口引用不能调用类中不属于接口的其他成员。

image-20231116143834253 image-20231116143948372
图16.3 类对象的引用以及接口的引用

16.5 接口和 as 运算符

​ 如果尝试将类对象引用强制转换为类未实现的接口引用,则会抛出异常。使用 as 运算符可以避免抛出异常:

  • 如果实现了类接口,则 as 返回指向接口的引用。
  • 如果未实现接口,则 as 返回 null,而不抛出异常。
image-20231116144201337

16.6 实现多个接口

  1. 类或结构可以实现任意数量的接口
  2. 所有实现的接口必须列在基类列表中,以逗号分隔(在基类名称之后,如果有的话)。

16.7 实现具有重复成员的接口

​ 如果一个类实现了多个接口,并且其中一些接口具有相同的成员,则类可以实现单个成员来同时匹配所有重复成员的接口。

image-20231116144546091 image-20231116144409582 image-20231116144424750
图16.4 由同一个类成员实现多个接口

16.8 多个接口的引用(*)

16.9 派生成员作为实现(*)

16.10 显示接口成员实现

​ 可以创建显示接口以实现相同接口的分离:

  • 使用限定接口名称声明。
  • 限定接口名称的声明如下:
image-20231116144904561 image-20231116144917674
图16.5 显示接口成员实现

​ 因此,对于成员函数而言,有如下三种实现方法:

  1. 类级别实现(不依赖接口,专门提供给类对象调用)。
  2. 显示接口成员实现(依赖接口,专门提供给接口调用)。
  3. 类级别和显示接口成员实现(类和接口都能调用)。

​ 下面这个例子包含了两个显示接口成员实现,而没有类级别的实现。即,只能通过接口引用调用函数 PrintOut,而不能使用类对象调用:mc.PrintOut()

image-20231116145312032 image-20231116145342711 image-20231116145352993 image-20231116145405427
图16.6 具有显示接口成员实现的接口引用

访问显示接口成员实现

​ 显示接口成员实现只能通过接口来访问:

image-20231116145931192

16.11 接口可以继承接口

  • 类在基类列表中只能有一个类名;而接口可以有任意多个接口。
image-20231116150123716
  • 列表中的接口本身也可以继承其他接口。
  • 继承后的接口包含自己的成员和所有继承接口的成员。

16.12 不同类实现一个接口的示例(*)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/243763.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

易生支付与青岛国资之间的合作即将成为现实。青岛国资决定以曲线入股易生支付。

易生金服的次要股权可能会有新的控制方。 根据西米支付网的消息&#xff0c;经营支付服务的持牌机构“易生支付”的唯一股东“易生金服”的第二大股东凯撒同盛发展股份有限公司的控股权将转让给青岛环海湾文化旅游发展有限公司&#xff0c;同时实际控制权也将交由青岛市市北区国…

车载导航系统UI界面,可视化大屏设计(PS源文件)

大屏组件可以让UI设计师的工作更加便捷&#xff0c;使其更高效快速的完成设计任务。现分享车载导航系统科技风蓝黑简约UI界面、车载系统UI主界面、车载系统科技风UI界面、首页车载系统科技感界面界面的大屏Photoshop源文件&#xff0c;开箱即用&#xff01; 若需 更多行业 相关…

Networkx实现小世界网络的分析

Networkx实现小世界网络的分析 小世界网络 小世界现象&#xff0c;也被称为六度分离原则&#xff0c;即如果你在地球上的任何地方随便选择任何两个人&#xff0c;你会发现一条至多由他们之间的6个熟人形成的路径。在网络科学语言中&#xff0c;六度也被称为小世界性质&#x…

产品经理必掌握自定义元件流程图泳道图

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a; 《产品经理管理项目周期及【Axure RP9】简介&安装&基本使用》 ⛺️ 越努力 &#xff0c;越幸运 目录 一、什么是自定义元件 1.1如何自定义元件 二、什么是流程图 &…

Axure的流程图/泳道图以及自定义元件库的使用

目录 1.ProcessOn的介绍 2.流程图以及泳道图的介绍 2.1流程图 2.2流程图的特点 2.3泳道图 2.4泳道图的特点 2.5流程图跟泳道图的优缺点 2.5.1优点&#xff1a; 2.5.2缺点&#xff1a; 2.6流程图的使用 2.7流程图的案列 2.8泳道图的使用 3.自定义元件库 4.门诊流程…

串口通信(4)-C#串口通信入门实例

本文通过实例讲解C#串口通信。 入门实例设计一个串口助手&#xff0c;能够很好的涵盖串口要点的使用。 目录 一、成品图 二、界面文件 三、后台代码 四、实例中要点 一、成品图 如下&#xff1a; 实现的过程 创建winform项目&#xff0c;将Form1文件的名称改为MainForm&…

Conda 使用教程大全来啦

什么是 Conda&#xff1f; Conda 是一款功能强大的软件包管理器和环境管理器&#xff0c;您可以在 Windows 的 Anaconda 提示符或 macOS 或 Linux 的终端窗口中使用命令行命令 Conda 可以快速安装、运行和更新软件包及相关依赖项。Conda 可以在本地计算机上创建、保存、加载和…

ubuntu22.04 docker安装ES8

创建es的网络 docker network create elastic安装运行es docker run --name es01 --net elastic -p 9200:9200 -e ES_JAVA_OPTS"-Xms1024m -Xmx1024m" -idt elasticsearch:8.2.2检查是否安装成功 sunyuhuasunyuhua-HKF-WXX:~$ docker ps CONTAINER ID IMAGE …

2023陇剑杯线上线下赛数据分析

好久没打过比赛了&#xff0c;对于这种偏蓝方的比赛我还是很喜欢 本文首发于&#xff1a;先知社区&#xff1a;https://xz.aliyun.com/t/13177 HW hard web_1 题目内容&#xff1a;服务器开放了哪些端口&#xff0c;请按照端口大小顺序提交答案&#xff0c;并以英文逗号隔开(如…

UE虚幻引擎项目更改名字怎么操作?

首先找到项目目录&#xff0c;直接更改项目程序的名字&#xff0c;其次点击项目程序右击使用文本打开&#xff0c;然后将Modules模块中的内容删除即可&#xff0c;然后运行程序就好啦&#xff01;

【LeetCode刷题】--172.阶乘后的零

172.阶乘后的零 方法&#xff1a; class Solution {public int trailingZeroes(int n) {int ans 0;for(int i 5;i<n;i5){for(int x i; x % 50; x/5){ans;}}return ans;} }进一步优化&#xff1a; class Solution {public int trailingZeroes(int n) {int ans 0;while (n…

主动学习与弱监督学习

人工智能数据的获取没有想象中的那么简单&#xff0c;虽然我们早已身处大数据的浪潮下&#xff0c;很多公司在获取数据的大浪中翻滚却始终没有找到一个合适的获取数据的渠道。很多情况下&#xff0c;获取高质量的人工智能数据需要消耗大量的人力、时间、金钱&#xff0c;但是对…

【移动通讯】【MIMO】[P1]【科普篇】

前言&#xff1a; 前面几个月把CA 的技术总体复盘了一下,下面一段时间 主要结合各国一些MIMO 技术的文档,复盘一下MIMO. 这篇主要参考华为&#xff1a; info.support.huawei.com MIMO 技术使用多天线发送和接受信号。主要应用在WIFI 手机通讯等领域. 这种技术提高了系统容量&…

mysql的负向条件查询会不会使用索引

mysql的负向条件查询&#xff0c;例如not in&#xff0c;会不会使用索引&#xff1f; 其实&#xff0c;mysql还是会尽量利用索引。如果查询的列上有索引&#xff0c;并且索引能够覆盖查询所需的列&#xff0c;那么mysql可能会使用索引来获取结果&#xff0c;而不是进行全表扫描…

解决设备能耗管理问题,易点易动来帮忙!

设备能耗管理是现代企业可持续发展的重要环节&#xff0c;然而&#xff0c;许多企业在设备能耗管理方面面临一系列问题&#xff1a; 能耗数据收集困难&#xff1a;企业需要监控和管理大量设备的能耗情况&#xff0c;但传统的手动方式收集能耗数据耗时耗力&#xff0c;无法实时获…

C语言-WIN32API介绍

Windows API 从第一个32位的Windows开始就出现了&#xff0c;就叫做Win32API.它是一个纯C的函数库&#xff0c;就和C标准库一样&#xff0c;使你可以写Windows应用程序过去很多Windows程序是用这个方式做出来的 main()? main()成为C语言的入口函数其实和C语言本身无关&…

Java中常见需要重写equals方法的类

目录 导言 一、自定义类 二、集合类 三、字符串类 四、数组类 五、枚举类 结论 导言 在Java编程中&#xff0c;equals方法是用来比较两个对象是否相等的关键方法之一。然而&#xff0c;在某些情况下&#xff0c;Java提供的默认equals方法可能无法满足我们的需求。因此&a…

《地理信息系统原理》笔记/期末复习资料(11. GIS的输出与地图可视化)

目录 11. GIS的输出与地图可视化 11.1. GIS的输出 11.1.1. 输出方式 11.1.2. GIS的图形输出设备 11.2. 地图符号 11.2.1. 地图符号的实质 11.2.2. 地图符号的分类 11.2.3. 地图符号的设计要求 11.3. 专题信息表达 11.3.1. 专题地图的基本概念 11.3.2. 专题地图的表示…

Esxi虚拟机无法添加加密狗处理

原创作者&#xff1a;运维工程师 谢晋 Esxi虚拟机无法添加加密狗处理 前提纪要添加直通模式 前提纪要 客户将加密狗插在Esxi主机上&#xff0c;并给虚拟机添加USB控制器再添加加密狗设备&#xff0c;但添加时候报错无法识别加密狗&#xff08;如下图&#xff09;&#xff0…

一个文件下png,jpg,jpeg,bmp,xml,json,txt文件名称排序命名

#utf-8 #authors 会飞的渔WZH #time:2023-12-13 import os# 要修改的图像所在的文件夹路径 root_path rD:\images\lines2\3 # 要修改的图像所在的文件夹路径filelist os.listdir(root_path) #遍历文件夹 print(len(filelist)) i0for item in filelist:if item.endswith(.…