一步一步学c#(四):继承
继承
1·继承的类型
在面向对象的编程中,有两种截然不同的继承类型,实现继承和接口继承。
实现继承:表示一个类型派生于一个基类型,它拥有该基类型的所有成员字段和函数。
接口继承:表示一个类型只继承了函数的签名,没有继承任何实现代码。
结构和类
结构总是派生自System.ValueType,它们还可以派生自任意多个接口。
类总是派生自用户选择的另一个类,它们可以派生自任意多个接口。
实现继承
声明派生自另一个类的一个类,语法如下:

如果在定义中没有指定基类,编译器就会默认为System.object是基类,所以下面的两段代码结果一样:

虚方法
把一个基类函数声明为virtual,就可以在任何派生类中重写该函数:

可以把属性声明为virtual,要在定义中添加关键字virtual:

成员字段和静态函数都不能声明为virtual,因为这个概念只对类中的实例函数有意义。
调用函数的基类版本
c#有一种特殊的语法用于从派生类中调用方法的基类版本:base.<MethodName>().假定派生自类中的一个方法要返回基类的方法90%的返回值,就可以使用语法:

}
密封类和密封方法
c#允许把类和方法声明为sealed。对于类,表示不能继承该类,对于方法,表示不能重写该方法:

在层次结构中添加无参数的构造函数
假定把每个人的名字初始化为字符串“<no name>”而不是null。就可以修改GenericCostomer中的代码:

在层次结构中添加带参数的构造函数
仅在顾客提供其姓名时才实例化顾客,带一个参数的GenericCustomer构造函数;

目前是正常运行,但是,编译器试图为派生类创建默认构造函数时,会产生一个错误,需要派生类提供一个构造函数,来避免这个编译错误:
可见性修饰符

类型定义可以是内部或共有的,这取决于是否希望在类型包含的程序集外部访问它:

不能把类型定义为protected,private和protected internal,因为这些修饰符对于包含在名称空间中的类型没有意义。
其他修饰符

接口
下面列出Microsoft预定义的一个接口system。idisposabl的完整定义。

声明接口在语法上与声明抽象类完全相同,接口只能包含方法,属性,索引器和事件的声明。
定义和实现接口
开发一个循环接口继承规范的小例子来说明如何定义和使用接口:
此例建立在银行账户的基础上。
首先,需要定义IBankAccount接口:

下面是第一个,一个由Royal Bank of Venus运行的存款账户:


为了说明不同的类如何实现相同的接口,下面假定Planetary Bank of Jupiter还实现一个类,GoldAccount来表示其银行账户中的一个:
测试他们用一些using语句:
}
执行结果:
派生的接口
定义一个新的接口ITransferBankAccount来说明,该接口的功能与IBankAccount相同,只是定义了一个方法,把资金直接转到另一个账户:

下面说明ITransferBankAccount:假定Planetary Bank of jupiter还提供了一个当前账户,

验证该类:


一步一步学c#(四):继承的更多相关文章
- 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计
本帖最后由 xinxincaijq 于 2013-1-9 10:27 编辑 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计 转自博客:http:// ...
- 一步一步学Vue(四)
接上篇.上篇中给出了代码框架,没有具体实现,这一篇会对上篇定义的几个组件进行分别介绍和完善: 1.TodoContainer组件 TodoContainer组件,用来组织其它组件,这是react中推荐 ...
- (转载)一步一步学Linq to sql系列文章
现在Linq to sql的资料还不是很多,本人水平有限,如果有错或者误导请指出,谢谢. 一步一步学Linq to sql(一):预备知识 一步一步学Linq to sql(二):DataContex ...
- 【DG】[三思笔记]一步一步学DataGuard
[DG][三思笔记]一步一步学DataGuard 它有无数个名字,有人叫它dg,有人叫它数据卫士,有人叫它data guard,在oracle的各项特性中它有着举足轻理的地位,它就是(掌声)..... ...
- 一步一步学ROP之linux_x64篇
一步一步学ROP之linux_x64篇 一.序 **ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防 ...
- 一步一步学ROP之linux_x86篇
一步一步学ROP之linux_x86篇 作者:蒸米@阿里聚安全 一.序 ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过 ...
- 一步一步学android控件(之六) —— MultiAutoCompleteTextView
今天学习的控件是MultiAutoCompleteTextView . 提到MultiAutoCompleteTextView 我们就自然而然地想到AutoCompleteTextView ,就想知道 ...
- 一步一步学Silverlight 2系列(30):使用Transform实现更炫的效果(下)
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(29):使用Transform实现更炫的效果(上)
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(28):图片处理
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
随机推荐
- 使用keil判断ARM的冷启动和热启动的方法
微处理器:LPC2114 编译环境:Keil MDK V4.10 思路: 常把单片机系统的复位分为冷启动和热启动.所谓冷启动,也就是一般所说的上电复位,冷启动后片内外RAM的内容是随机的,通常是0x0 ...
- javascript instanceof
object instanceof constructor instanceof运算符用来检测constructor.prototype是否存在于参数object的原型链上. 对于instanceof ...
- 一个js爬虫
1. 第一个demo 2. configs详解——之成员 3. configs详解——之field 4. configs详解——之site, page和console 5. configs详解——之回 ...
- res://ieframe.dll/acr_error.htm 纯手动解决方法
res://ieframe.dll/acr_error.htm 引起这个原因的是,你IE浏览器的扩展组件的问题,因为不知道是具体哪个组件出了问题,所以要采用一刀切的方法来处理: 在开始/或开始键+R, ...
- 网易云课堂_程序设计入门-C语言_第一周:简单的计算程序_1逆序的三位数
1 逆序的三位数(5分) 题目内容: 程序每次读入一个正三位数,然后输出逆序的数字.注意,当输入的数字含有结尾的0时,输出不应带有前导的0.比如输入700,输出应该是7. 输入格式: 每个测试是一个3 ...
- 打包ipa分发给测试机安装步骤
1.确定可以打包的Mac电脑,即该Mac电脑已经具备可以打包的权限. 需要上传一份Mac电脑的描述文件,即csr文件. 2.创建bundle id 3.添加测试设备 4.生成证明描述文件 5.Xcod ...
- Body joints angle using Kinect
http://stackoverflow.com/questions/12608734/body-joints-angle-using-kinect-checking-time-interval?rq ...
- Spire PDF for .NET 在ASP.NET中的使用 ---- 并非那么“美好”,有些挫折!
笔者注:看此文前,请您先看一下上一篇文章吧. 昨天的时候,我测试了一下Spire PDF在WinForm程序中的应用,可以说用起来很简单(请忽略效率问题,没有进行测试).不过在互联网如此发达的今天,适 ...
- 关于Oracle备份中的fractured block
One danger in making online backups is the possibility of inconsistent data within a block. For exam ...
- binaryTree:普通二叉树
#ifndef _Tree_H #define _Tree_H typedef int ElementType; typedef struct TreeNode { ElementType Eleme ...