继承

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#(四):继承的更多相关文章

  1. 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计

    本帖最后由 xinxincaijq 于 2013-1-9 10:27 编辑 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计 转自博客:http:// ...

  2. 一步一步学Vue(四)

    接上篇.上篇中给出了代码框架,没有具体实现,这一篇会对上篇定义的几个组件进行分别介绍和完善: 1.TodoContainer组件 TodoContainer组件,用来组织其它组件,这是react中推荐 ...

  3. (转载)一步一步学Linq to sql系列文章

    现在Linq to sql的资料还不是很多,本人水平有限,如果有错或者误导请指出,谢谢. 一步一步学Linq to sql(一):预备知识 一步一步学Linq to sql(二):DataContex ...

  4. 【DG】[三思笔记]一步一步学DataGuard

    [DG][三思笔记]一步一步学DataGuard 它有无数个名字,有人叫它dg,有人叫它数据卫士,有人叫它data guard,在oracle的各项特性中它有着举足轻理的地位,它就是(掌声)..... ...

  5. 一步一步学ROP之linux_x64篇

    一步一步学ROP之linux_x64篇 一.序 **ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防 ...

  6. 一步一步学ROP之linux_x86篇

    一步一步学ROP之linux_x86篇 作者:蒸米@阿里聚安全 ​ 一.序 ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过 ...

  7. 一步一步学android控件(之六) —— MultiAutoCompleteTextView

    今天学习的控件是MultiAutoCompleteTextView . 提到MultiAutoCompleteTextView 我们就自然而然地想到AutoCompleteTextView ,就想知道 ...

  8. 一步一步学Silverlight 2系列(30):使用Transform实现更炫的效果(下)

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  9. 一步一步学Silverlight 2系列(29):使用Transform实现更炫的效果(上)

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  10. 一步一步学Silverlight 2系列(28):图片处理

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

随机推荐

  1. 又优化了一下 Android ListView 异步加载图片

    写这篇文章并不是教大家怎么样用listview异步加载图片,因为这样的文章在网上已经有很多了,比如这位仁兄写的就很好: http://www.iteye.com/topic/685986 我也是因为看 ...

  2. 如何用ATL创建ActiveX控件

    演示截图: 代码简介或代码解析: 如何用ATL创建ActiveX控件 实现了一个ActiveX控件,它在一个圆内部有个正多边形,当用户在多变形内部单击将会使多边形的边数在当前的基础上+1,在多变形外部 ...

  3. 如何在Root的手机上开启ViewServer,使得HierachyViewer能够连接

    前期准备: 关于什么是Hierarchy Viewer,请查看官方文档:http://developer.android.com/tools/debugging/debugging-ui.html.个 ...

  4. 栈和队列的Java实现

    一.  栈 1.概念 栈是一种特殊的线性表,它只能在栈顶(top)进行插入(push)和删除(pop)操作. 栈的常用操作: 入栈(push):向栈顶插入元素 出栈(pop):从栈顶删除元素 访问栈顶 ...

  5. 【Apache ZooKeeper】为ZNode设置watcher

    众所周知,ZooKeeper中的ZNode是树形结构,现在我需要给/app1结点设置watcher,监听/app1下增减.删除和修改的结点,并将相应的事件使用log4j记录到日志文件中.ZNode的变 ...

  6. UIViewController、UINavigationController与UITabBarController的整合使用

    UINavigationController与UITabBarController是iOS开发中最常用的两种视图控制器,它们都属于UIViewController的子类,继承关系如下: @interf ...

  7. App.config和Web.config配置文件的自定义配置节点

    前言 昨天修改代码发现了一个问题,由于自己要在WCF服务接口中添加了一个方法,那么在相应调用的地方进行更新服务就可以了,不料意外发生了,竟然无法更新.左查右查终于发现了问题.App.config配置文 ...

  8. C# DataTable 详解

    添加引用 using System.Data; 创建表 //创建一个空表 DataTable dt = new DataTable(); //创建一个名为"Table_New"的空 ...

  9. Asp.Net MVC 常用开发方式之EF Code First

    在我们的工作和学习当中,经常会遇到中小型项目,这些项目除了业务上的区别较大外,对于底层和数据访问,其实都差不多.记得以前做项目时,每次都要重复的写底层操作数据库的代码,不仅浪费时间,也无太大意思,后来 ...

  10. Deep Clone 常用方式总结

    Deep Clone Example 总结 Deep Clone 一般有如下几种实现方式: 纯手工每个类实现赋值 (ps: 不做介绍,一般都不想这么玩) 序列化和反序列化 纯反射 emit 或 Exp ...