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

news2024/11/28 20:59:51

文章目录

    • 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 不同类实现一个接口的示例(*)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab 曲线动态绘制

axes(handles.axes1); % 选定所画坐标轴 figure也可 h1 animatedline; h1.Color b; h1.LineWidth 2; h1.LineStyle -; % 线属性设置 for i 1 : length(x)addpoints(h1,x(i),y(i)); % x/y为待绘制曲线数据drawnow;pause(0.01); % 画点间停顿 end 示例&#xff1a; figure…

如何在Web应用中添加一个JavaScript Excel查看器

前言 在现代的Web应用开发中&#xff0c;Excel文件的处理和展示是一项常见的需求。为了提供更好的用户体验和功能&#xff0c;经常需要在Web应用中添加一个JavaScript Excel查看器&#xff0c;小编今天将为大家展示如何借助葡萄城公司的纯前端表格控件——SpreadJS来创建一个E…

Spark RDD惰性计算的自主优化

原创/朱季谦 RDD&#xff08;弹性分布式数据集&#xff09;中的数据就如final定义一般&#xff0c;只可读而无法修改&#xff0c;若要对RDD进行转换或操作&#xff0c;那就需要创建一个新的RDD来保存结果。故而就需要用到转换和行动的算子。 Spark运行是惰性的&#xff0c;在…

网络安全(四)--Linux 主机防火墙

7.1. 介绍 防火墙&#xff08;Firewall&#xff09;&#xff0c;也称防护墙&#xff0c;是由Check Point创立者Gil Shwed于1993年发明并引入国际互联网&#xff08;US5606668&#xff08;A&#xff09;1993-12-15&#xff09;。 它是一种位于内部网络与外部网络之间的网络安全…

clickhouse数据库磁盘空间使用率过高问题排查

一、前言 clickhouse天天触发磁盘使用率过高告警&#xff0c;所以需要进行排查&#xff0c;故将排查记录一下。 二、排查过程 1、连接上进入clickhouse 2、执行语句查看各库表使用磁盘情况 SELECT database, table, formatReadableSize(sum(bytes_on_disk)) as disk_space F…

数据库加密产品都有哪些功能?

数据库加密产品的主要功能是保护数据库中的敏感数据&#xff0c;确保其机密性和完整性。以下是数据库加密产品可能具备的一些功能&#xff1a; 数据加密&#xff1a;对数据库中的敏感数据进行加密&#xff0c;使得未经授权的人员无法读取或篡改数据。加密算法可以包括对称加密、…

2024 年 20 款最佳免费视频转换器软件 [安全快速有效]

最佳视频转换器软件的功能和定价的回顾和比较。从顶级付费和免费在线视频转换器工具列表中选择&#xff0c;可以快速轻松地转换任何视频&#xff1a; 什么是视频转换器&#xff1f; 视频转换工具允许您将视频从一种格式转换为另一种格式。第一个商业上成功的视频格式是 Quad&…

面试官:说说webpack中常见的Loader?解决了什么问题?

面试官&#xff1a;说说webpack中常见的Loader&#xff1f;解决了什么问题&#xff1f; 一、是什么 loader 用于对模块的"源代码"进行转换&#xff0c;在 import 或"加载"模块时预处理文件 webpack做的事情&#xff0c;仅仅是分析出各种模块的依赖关系&a…

易宝OA 两处任意文件上传漏洞复现

0x01 产品简介 易宝OA系统是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台,具有信息管理、 流程管理 、知识管理(档案和业务管理)、协同办公等多种功能。 0x02 漏洞概述 易宝OA系统UploadFile、BasicService.asmx等接口处存在文件上传漏洞,未授权的攻击者可…

【Docker】从零开始:17.Dockerfile基本概念

【Docker】从零开始&#xff1a;17.Dockerfile 概述1.什么是Dockerfile2.Dockerfile构建三大步骤3.Docker执行Dockerfile流程 一张图理解Dockerfile常用保留指令~FROM~~MAINTAINER~~RUN~两种格式 ~EXPOSE~~WORKDIR~~USER~~ENV~~ADD~~COPY~两种格式 ~VOLUME~~CMD~两种格式注意 ~…

【译】虚拟线程:绝对优势

原文地址&#xff1a;Virtual Threads: A Definite Advantage 一、前言 深入了解虚拟线程如何提高应用程序的性能和可扩展性&#xff0c;同时将线程管理开销降到最低。 探索虚拟线程是一件很棒的事情&#xff0c;它是 Java 的一项强大功能&#xff0c;有望彻底改变多线程应用…

【数据结构】—红黑树(C++实现)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 &#x1f49c;本文前置知识&#xff1a; AVL树 ♈️今日夜电波&#xff1a;Letter Song—ヲタみん 1:36━━━━━━️&#x1f49f;──────── 5:35 …

编织魔法世界——计算机科学的奇幻之旅

文章目录 每日一句正能量前言为什么当初选择计算机行业计算机对自己人生道路的影响后记 每日一句正能量 人生就像赛跑&#xff0c;不在乎你是否第一个到达尽头&#xff0c;而在乎你有没有跑完全程。 前言 计算机是一个神奇的领域&#xff0c;它可以让人们创造出炫酷的虚拟世界…

上位机与PLC:ModbusTCP通讯之数据类型转换

前请提要: 从PLC读取的数值,不管是读正负整数还是正负浮点数,读取过来后都会变成UInt16,也就是Ushort类型 一、ushort(UInt16)转成 Int32 源代码方法: //ushort类型转Int32类型的方法private int ushortToInt32(ushort[] date, int start){//先进行判断,长度是否正确…

在线工具分享SQL转ElasticSearchDSL语句

&#x1f60a; 作者&#xff1a; 瓶盖子io &#x1f496; 主页&#xff1a; 瓶盖子io-CSDN博客

vuepress-----10、vssue使用

vssue使用 https://vssue.js.org/ 按照文档 https://vssue.js.org/zh/guide/github.html (opens new window) 操作 # 1、创建 OAuth application https://github.com/settings/applications/new (opens new window) # 2、安装插件 yarn add vssue/vuepress-plugin-vssue# 这…

系统调用过程

应用程序通过系统调用请求操作系统的服务。而系统中的各种共享资源都由操作系统内核统一掌管&#xff0c;因此凡是与共享资源有关的操作&#xff08;如存储分配、/O操作、文件管理等&#xff09;&#xff0c;都必须通过系统调用的方式向操作系统内核提出服务请求&#xff0c;由…

基于javaweb实现的学籍管理系统

一、 系统架构 前端&#xff1a;jsp | jquery | css 后端&#xff1a;servlet | jstl | sqljdbc 环境&#xff1a;jdk1.6 | mysql 二、代码及数据库 三、功能介绍 01. 登录页 02. 首页 03. 修改个人密码 04. 专业信息管理 05. 班级信息管理 06. 课程信息管理 07. 学籍…

BigDecimal:高精度计算的秘密武器!

大家好&#xff0c;我是小米&#xff01;最近在面试的时候&#xff0c;发现很多公司都喜欢考察关于BigDecimal的问题&#xff0c;所以我决定在这里和大家分享一下我的经验。如果你在面试中曾经遇到过这个问题&#xff0c;或者想要更深入地了解BigDecimal&#xff0c;那就赶紧跟…

基于vue开发-创建登录页

我们使用vue创建完成项目后就开始我们的项目页面开发&#xff0c;如有不清楚怎么操作的可以看博主的前一篇文档 使用vue UI安装路由插件-CSDN博客 在src/views文件夹中创建一个登录页面 在此之前&#xff0c;我们可以先安装一个插件、element、vant、iview等等&#xff0c;可…