解读经典《C#高级编程》继承 页107-113.章4
前言
本章节开始讲接口。
接口
接口的声明很像抽象类,有方法的声明但无方法体。但它比抽象类限制更多。和类比起来,接口的定义有众多限制。
- 接口只能包含声明,而无方法体
- 接口只能包含方法、属性、索引器、事件的声明。即不能有:构造函数、字段、操作符重载
- 成员不允许声明修饰符。接口默认就是public的。
定义和实现接口
一个比较典型的接口定义,比如:
/// <summary>
/// 虚拟读写器
/// </summary>
public class VirtualReader : RFReader, IRFReader, IDevice
{
//此类继承自两个接口:设备IDevice,和读写器IRFReader,并继承读写器基类RFReader
//派生类 需要实现接口声明的所有方法
}
我们可以看到:
- 类可以继承多个接口
- 接口命名规范,是以I开头的字符串,即所谓匈牙利(Hungarian)命名法
这是由C#语法的特殊性决定的,Java的接口就没有这种命名方式。这是因为C#对类和接口,都叫做继承,对接口加I能够明确区分出哪些是接口哪些是类。而Java继承用关键字extends,实现接口用关键字implements,很好区分。
在接口使用上,“接口引用”完全等同于“类引用”。比如以上的例子,在实例化类时,如下定义都是可以的:
IDevice device = new VirtualReader();
IRFReader reader = new VirtualReader();
VirtualReader vreader = new VirtualReader();
这样就可以在不同的应用场景下,声明不同的类或者接口来实现代码。
派生的接口
接口和类一样可以继承。同时,因为接口可以多继承,所以接口变的非常强大。在编程中用好接口是一个基本技能要求。
举例:
/// <summary>
/// 设备
/// </summary>
public interface IDevice
{
/// <summary>
/// 当前设备的属性配置
/// </summary>
DeviceConfigurations Configurations { get; set; }
}
/// <summary>
/// Rfid读写器/发卡器/读卡器/一体机等
/// </summary>
public interface IRFReader : IDevice
{
/// <summary>
/// 读写器类型Id
/// </summary>
ReaderType TypeId { get; set; }
/// <summary>
/// 读写器是否连接
/// </summary>
bool IsConnected { get; set; }
/// <summary>
/// 读写器是否正在读取
/// </summary>
bool IsReading { get; set; }
}
到此为止,本章的继承已经讲完了。我们讲到了对类的单继承,对接口的多继承。以及在继承过程中使用多种关键字,实现不同的特性,比如virtual,override,new,sealed等。还讲到了类构造时使用初始化器的原理。
下一章我们开始讲解泛型。泛型是个好东西,理解好、使用好泛型是个基础技术能力。
觉得文章有意义的话,请动动手指,分享给朋友一起来共同学习进步。
欢迎关注本人如下公众号 “产品技术知与行” ,打造全面的结构化知识库,包括原创文章、免费课程(C#,Java,Js)、技术专题、视野知识、源码下载等内容。

扫描二维码关注
解读经典《C#高级编程》继承 页107-113.章4的更多相关文章
- C#高级编程笔记之第三章:对象和类型
类和结构的区别 类成员 匿名类型 结构 弱引用 部分类 Object类,其他类都从该类派生而来 扩展方法 3.2 类和结构 类与结构的区别是它们在内存中的存储方式.访问方式(类似存储在堆上的引用类型, ...
- 《Node.js 高级编程》简介与第二章笔记
<Node.js 高级编程> 作者简介 Pedro Teixerra 高产,开源项目程序员 Node 社区活跃成员,Node公司的创始人之一. 10岁开始编程,Visual Basic.C ...
- 20191105 《Spring5高级编程》笔记-第5章
第5章 Spring AOP 面向切面编程(AOP)是面向对象编程(OOP)的补充.AOP通常被称为实施横切关注点的工具.术语横切关注点是指应用程序中无法从应用程序的其余部分分解并且可能导致代码重复和 ...
- C#高级编程第9版 第一章 .NET体系结构 读后笔记
.NET的CLR把源代码编译为IL,然后又把IL编译为平台专用代码. IL总是即时编译的,这一点的理解上虽然明白.当用户操作C#开发的软件时,应该是操作已经编译好的程序.那么此时安装在客户机上的程序是 ...
- 20191105 《Spring5高级编程》笔记-第6章
第6章 Spring JDBC支持 Spring官方: 位于Spring Framework Project下. 文档: https://docs.spring.io/spring-framework ...
- 20191103 《Spring5高级编程》笔记-第4章
第4章 详述Spring配置和Spring Boot 4.2 管理bean生命周期 通常,有两个生命周期事件与bean特别相关:post-initialization和pre-destruction. ...
- C#高级编程笔记(11至16章)异步/托管/反射/异常
11.1.2LINQ语句 LINQ查询表达式以from子句开始,以select或者group子句结束.在这两个子句之间可以跟零个或者多个from.let.where.join或者orderby子句. ...
- 20191105 《Spring5高级编程》笔记-第12章
第12章 使用Spring远程处理 12.4 在Spring中使用JMS 使用面向消息的中间件(通常成为MQ服务器)是另一种支持应用程序间通信的流行方法.消息队列(MQ)服务器的主要优点在于为应用程序 ...
- 20191105 《Spring5高级编程》笔记-第9章
第9章 事务管理 一些名词: 2PC(2 Phase Commit) XA协议 JTS(Java Transaction Service) JCA(Java EE Connector Architec ...
- 20191103 《Spring5高级编程》笔记-第3章
第3章 在Spring中引入IoC和DI 依赖注入是IOC的一种特殊形式,尽管这两个术语经常可以互换使用. 3.1 控制反转和依赖注入 IOC的核心是DI,旨在提供一种更简单的机制来设置组件依赖项,并 ...
随机推荐
- BZOJ_3223: Tyvj 1729 文艺平衡树 _splay
题意: 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 分析: ...
- 在Jenkins中使用sonar进行静态代码检查
要解决的问题 jenkins自动构建完成后,希望能通过sonar静态代码检查生成一份报告,给与开发人员对当前代码的做一个质量评估和修改意见 1.安装并配置sonar服务器 懒得说,跟着官方文档走就行, ...
- 【已解决】通过Package或者Package+Activity启动应用
有时很烦人,打开要启动的apk,通过adb命令(adb shell "dumpsys activity |grep Focuse") 获取到的应用包名 无法使用adb命令(adb ...
- sun.misc.Unsafe 详解
原文地址 译者:许巧辉 校对:梁海舰 Java是一门安全的编程语言,防止程序员犯很多愚蠢的错误,它们大部分是基于内存管理的.但是,有一种方式可以有意的执行一些不安全.容易犯错的操作,那就是使用Unsa ...
- Vue.js 牛刀小试(持续更新~~~)
一.前言 这个系列的文章开始于今年9月从上一家公司辞职后,在找工作的过程中,觉得自己应该学习一些新的东西,从前几章的更新日期也可以看出,中间隔了很长的时间,自己也经历了一些事情,既然现在已经稳定了,就 ...
- 【递归打卡2】求两个有序数组的第K小数
[题目] 给定两个有序数组arr1和arr2,已知两个数组的长度分别为 m1 和 m2,求两个数组中的第 K 小数.要求时间复杂度O(log(m1 + m2)). [举例] 例如 arr1 = [1, ...
- 【转】javascript笔记之apply、call、bind用法
原文地址:https://www.cnblogs.com/coco1s/p/4833199.html apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数 ...
- Asp.NetCore轻松学-使用Docker进行容器化托管
前言 没有 docker 部署的程序是不完整的,在写了 IIS/Centos/Supervisor 3篇托管介绍文章后,终于来到了容器化部署,博客园里面有关于 docker 部署的文章比比皆是,作为硬 ...
- CSS引入本地字体与在线字体
有些时候为了强调某些文字,需要使用一些比较特别的字体,CSS中现在也可以比较方便的引入字体了,如下: /* 定义字体 */ @font-face{ font-family: Arista2; src: ...
- Altium Designer快速调整丝印
Altium Designer快速调整丝印 今天我为大家讲的内容是altium designer快速调整丝印,这是我们做完PCB设计布线完成后的下一个步,很多朋友都是非常熟悉的.但是我们很多人只会用a ...