【C# 】继承
背景..什么是继承?
「继承」是对象导向编程的其中一个基本属性。 它可让您定义子类,重复使用(继承)、扩充或修改父类别行为。 其成员可供继承的类别称为基底类别。 继承基底类别成员的类别则称为「衍生类别」。
C# 和 .NET 只支持「单一继承」。 也就是说,类别只能继承自单一类别。 不过,继承可以转移,这可让您定义一组型别的继承阶层。 换句话说,型别 可继承自型别,其继承自型别 ,而该类型的继承来源为基底类别类型 。 因为继承可以转移,所以型别可以使用型别的成员。D
C
B
A
D
A
基底类别的所有成员不一定都由衍生类别继承。 不会继承的成员如下..
静态构建函数,其会初始化类的静态数据。
构造函数,您调用它创建一个新的执行个体。 每个类别都必须定义自己的建构函数。
析构函数,由执行阶段的内存回收行程呼叫以终结类别的执行个体。
由派生继承基类别的所有其他成员时,是否可以看见它们,取决于其存取范围。 成员存取范围会影响其在衍生类别的可见性,如下所示..
私用成员只有以嵌套方式置于其基底类别时,才会显示在衍生类别中。 否则,不会显示在衍生类别中。 在下列示例中, 是衍生自 的嵌套类,而则衍生自 。 私用字段会显示在 A.B 中。 不过,如果您移除方法中的注解,并尝试编译这个示例,它会产生编译器错误 CS0122:「'A.value' 的保护层级导致无法对其进行访问」。
A.B
A
C
A
A.value
C.GetValue
继承使用范围
只适用于类别和接口。
隐式继承
型别分类 隐含继承自
Class Object
struct ValueType, Object
枚举 Enum, ValueType, Object
Delegate MulticastDelegate, Delegate, Object
继承和"IS"关系
通常,继承用于表示基类与一个或多个派生类之间的"is a"关系。
【C# 】继承的更多相关文章
- javaScript的原型继承与多态性
1.prototype 我们可以简单的把prototype看做是一个模版,新创建的自定义对象都是这个模版(prototype)的一个拷贝 (实际上不是拷贝而是链接,只不过这种链接是不可见,给人们的感觉 ...
- JavaScript的继承实现方式
1.使用call或apply方法,将父对象的构造函数绑定在子对象上 function A(){ this.name = 'json'; } function B(){ A.call(this); } ...
- javascript中的继承与深度拷贝
前言 本篇适合前端新人,下面开始...... 对于前端新手来说(比如博主),每当对js的对象做操作时,都是一种痛苦,原因就是在于对象的赋值是引用的传递,并非值的传递,虽然看上去后者赋值给了前者,他们就 ...
- 谈谈一些有趣的CSS题目(四)-- 从倒影说起,谈谈 CSS 继承 inherit
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- JS继承类相关试题
题目一: //有关于原型继承的代码如下:function Person(name) { this.name = name;}Person.prototype = { getName : f ...
- JS继承之寄生类继承
原型式继承 其原理就是借助原型,可以基于已有的对象创建新对象.节省了创建自定义类型这一步(虽然觉得这样没什么意义). 模型 function object(o){ function W(){ } W. ...
- JS继承之借用构造函数继承和组合继承
根据少一点套路,多一点真诚这个原则,继续学习. 借用构造函数继承 在解决原型中包含引用类型值所带来问题的过程中,开发人员开始使用一种叫做借用构造函数(constructor stealing)的技术( ...
- JS继承之原型继承
许多OO语言都支持两种继承方式:接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.如前所述,由于函数没有签名,在ECMAScript中无法实现接口继承.ECMAScript只支 ...
- 深入浅出JavaScript之原型链&继承
Javascript语言的继承机制,它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instanc ...
- 如果你也会C#,那不妨了解下F#(7):面向对象编程之继承、接口和泛型
前言 面向对象三大基本特性:封装.继承.多态.上一篇中介绍了类的定义,下面就了解下F#中继承和多态的使用吧.
随机推荐
- lua之自索引
Father={ a=100, b=200 } function Father:dis() print(self.a,self.b) end Father.__index=Father Son= { ...
- Github基于Web的编辑器
在 GitHub 存储库中使用基于 Web 的编辑器来创建和提交代码更改. 关于 GitHub 基于 Web 的编辑器 基于 Web 的编辑器引入了全新的轻量级编辑体验,可完全在您的浏览器中运行.使用 ...
- linux中cut命令与tr命令
目录 一:linux中cut命令 1.cut 命令作用 2.参数 3.参数案例解析: 二:tr命令 1.tr命令作用 2.tr命令格式 3.tr命令参数 4.案例解析: 一:linux中cut命令 1 ...
- Homework_1
寒假第一份作业 一.博客园部分 1.个人博客园链接 Click here 2.markdown界面截图 我用typora编辑 所以贴上typora界面的截图 二.Github部分 1.个人Github ...
- Win11怎么启动任务管理器?Win11启动任务管理器的四种方法
Win11怎么启动任务管理器?小编为大家带来了Win11启动任务管理器的四种方法,感兴趣的朋友一起看看吧 任务管理器是Windows系统中一项非常实用的功能.不过在最新版Win11中,右击任务栏启动任 ...
- ApacheCN 计算机视觉译文集 20210212 更新
新增了六个教程: OpenCV 图像处理学习手册 零.前言 一.处理图像和视频文件 二.建立图像处理工具 三.校正和增强图像 四.处理色彩 五.视频图像处理 六.计算摄影 七.加速图像处理 Pytho ...
- Git常用命令(超实用)
Git常用命令 一.Git常用命令 1.1 创建SSH Key 1.2 仓库 1.3 增加/删除文件 1.4 代码提交 1.5 分支 1.6 标签 1.7 查看信息 1.8 远程同步 1.9 撤销 1 ...
- Win10正式版屏幕一直闪烁怎么办
这个原因是由于两个账户都在线,一个账户更替到另一个账户时出现的 解决办法:先注销一个账户,再登录到另一个账户,即只保持一个账户在线,就不会出现屏幕闪烁的情况.
- Thread的打断
常用方法 public void interrupt() t.interrupt() 打断t线程(设置t线程某给标志位f=true,并不是打断线程的运行),不能打断正在竞争锁的线程. public b ...
- Linux运维-常用操作-培训用例
一.服务器环境 Centos 7.9 二.常用连接工具(免费) 1.Finalshell 2.MobaXterm 3.Putty + WinSCP 三.Linux 系统目录结构 /bin :是 Bi ...