1.类继承

  通过继承我们可以定义一个新类,新类纳入一个已经声明的类并进行扩展。

  1.可以使用- 一个已经存在的类作为新类的基础。.已存在的类称为基类(baseclass),新类称为派生类(derivedclass)。派生类成员的组成如下:

    (1)自己声明中的成员。

    (2)基类的成员.

  2.要声明一个派生类,需要在类名后加入基类规格说明。基类规格说明由冒号和后面跟着用作基类的类的名称组成。派生类被描述为直接继承自列出的基类。“

  3.派生类被描述为扩展它的基类,因为它包含了基类的成员,加上在它自己的声明中的任何附加功能。

  4. 派生类不能删除它所继承的任何成员。

2.所有类都派生自Object类

  除了特殊的类object,所有的类都是派生类,即使它们没有基类规格说明。类object是唯一的非派生类,因为它是继承层次结构的基础。
  没有基类规格说明的类隐式地直接派生自类object.不加基类规格说明只是指定object为基类的简写。这两种形式是语义等价的。 

  关于类继承的其他重要内容如下:

    1.一个类声明的基类规格说明中只能有- 一个单独的类。这称为单继承。

    2.虽然类只能直接继承- 一个基类,但继承的层次没有限制。也就是说,作为基类的类可以派生自另外- 一个类,而它又派生自另外一个类,直下去,直至最终到达object.

3.隐藏基类的成员

虽然派生类不能删除它继承的任何成员,但它可以隐藏它们。

  1.要隐藏- 一个继承的数据成员,需要声明- 一个新的相同类型的成员,并使用相同的名称。

  2.通过在派生类中声明新的带有相同签名的函数成员,可以隐藏或掩盖继承的函数成员。请记住,签名由名称和参数列表组成,但不包括返回类型。

  3.要让编译器知道你在故意隐藏继承的成员,使用new修饰符。没有它,程序可以成功编译,但编译器会警告你隐藏了一个继承的成员。

  4.也可以隐藏静态成员。

4.基类访问

5.虚方法和覆盖写法

  在上- 一节看到,当使用基类引用访问派生类对象时,得到的是基类的成员。虚方法可以使基类的引用访问“升至”派生类内。

  可以使用基类引用调用派生类(derivedclass) 的方法,只需满足下面的条件:

    1.派生类的方法和基类的方法有相同的签名和返区类型。

    2.基类的方法使用virtua1标注。

    3.派生类的方法使用override标注。

  其他关于virtual和override修饰符的重要信息如下:

    1.覆写和被覆写的方法必须有相同的可访问性。换一种说法,被覆写的方法不能是private等,而覆写方法是public。

    2.不能覆写static 方法或非虚方法。口方法、属性和索引(在前-章阐述),以及称为事件(将在后面阐述) 的另一种成员类型,它们都可以被声明为virtua1和override.

6.覆写标记为overridede方法

  覆写方法可以在继承的任何层次出现。

    1.当使用对象基类部分的引用调用- 一个覆写的方法时,方法的调用被沿派生层次上溯执行,直到标记为override的方法的最派生(most-derived) 版本。

    2.如果在更高的派生级别有该访法的其他声明,但没有被标记为override,那么它们不会被调用。

7.构造函数的执行

  1.要创建对象的基类部分,基类的- 一个构造函数被作为创建实例过程的- 一部分被调用。

  2.继承层次链中的每个类在执行它自己的构造函数体之前执行它的基类的构造函数。

  例如,下面的代码展示了类MyDerivedClass和它的构造函数的声明。当该构造丽数被调用时,它在执行自己的方法体之前调用无参数的构造函数MyBaseClass( )。

8.构造函数初始化语句

  默认情况下,在对象被构造时,基类的无参数构造函数被调用。但构造函数可以被重载,所以基类可能有- 一个以上的构造函数。如果希望派生类使用- 一个指定的基类构造函数而不是无参数构造函数,必须在构造函数初始化语句中指定它。

  有两种形式的构造函数初始化语句:

    1.第- 一种形式使用关键字base并指明使用哪- 一个基类构造函数。

    2.第二种形式使用关键字this 并指明应该使用当前类的哪- 一个另外的构造函数。

  基类构造初始化语句放在冒号后面,冒号紧跟着类的构造函数声明的参数列表。构造函数初始化语句由关键字base和要调用的基类构造函数的参数列表组成。

  例如:

  下面的代码展示了类MyDerivedClass的构造函数。

    1.构造函数初始化语句指明要使用的基类构造函数是有两个参数的那个。第一个参数是一个string,第二个参数是- 一个int。

    2.在基类参数列表中的参数必须在类型和顺序方面匹配已定的基类构造函数的参数列表。

C#图解:第七章的更多相关文章

  1. C#图解第七章:类和继承

    1.类继承 通过继承我们可以定义一个新类,新类纳入一个已经声明的类并进行扩展. 1.可以使用- 一个已经存在的类作为新类的基础..已存在的类称为基类(baseclass),新类称为派生类(derive ...

  2. 《图解HTTP》阅读笔记--第七章---确保WEB安全的HTTPS

    第七章.确保WEB安全的HTTPSHTTP的缺点:通信使用明文(不加密),内容可能会被窃听 解决---加密处理: //将通信加密 :通过SSL(安全套接层)---HTTPS(超文本传输安全协议)--- ...

  3. 【转】第七章、Linux 文件与目录管理

    原文网址:http://vbird.dic.ksu.edu.tw/linux_basic/0220filemanager.php 第七章.Linux 文件与目录管理 最近升级日期:2009/08/26 ...

  4. 第七章、Linux 文件与目录管理

    第七章.Linux 文件与目录管理   1. 目录与路径 1.1 相对路径与绝对路径 1.2 目录的相关操作: cd, pwd, mkdir, rmdir 1.3 关於运行档路径的变量: $PATH ...

  5. 精通Web Analytics 2.0 (9) 第七章:失败更快:爆发测试与实验的能量

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第七章:失败更快:爆发测试与实验的能量 欢迎来到实验和测试这个棒极了的世界! 如果Web拥有一个超越所有其他渠道的巨大优势,它就 ...

  6. 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第七章 使用对象服务 本章篇幅适中,对真实应用中的常见问题提供了切实可行的解决方案. ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7  标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...

  8. Java语言程序设计(基础篇) 第七章 一维数组

    第七章 一维数组 7.2 数组的基础知识 1.一旦数组被创建,它的大小是固定的.使用一个数组引用变量,通过下标来访问数组中的元素. 2.数组是用来存储数据的集合,但是,通常我们会发现把数组看作一个存储 ...

  9. objective-c第七章课后练习2

    题:改变第七章例子中print方法,增加bool参数,判断如果是YES则对分数进行约简 @interface Fraction : NSObject { //int num,den; } @prope ...

随机推荐

  1. Java知多少(77)日期和时间类

    Java 的日期和时间类位于 java.util 包中.利用日期时间类提供的方法,可以获取当前的日期和时间,创建日期和时间参数,计算和比较时间. Date 类 Date 类是 Java 中的日期时间类 ...

  2. elasticsearch client 为空 错误信息:java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecut‌​or()Ljava/util/concu‌​rrent/Executor

    错误信息:java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecut‌​or() ...

  3. DapperExtensions and Dapper.Contrib在表构架不是默认dbo时的处理 DapperExtensions and Dapper.Contrib with non-dbo Schema

    什么是数据库的Schema dbo是一个构架(schema),与sql2000不同的是,在sql2005中,表的调用格式如下:"数据库名.构架名.表名",同一个用户可以被授权访问多 ...

  4. [JS] ECMAScript 6 - Object : compare with c#

    Ref: 对象的扩展 Outline: 属性的简洁表示法 属性名表达式 方法的 name 属性 Object.is() Object.assign() 属性的可枚举性和遍历 Object.getOwn ...

  5. 6、二、App Components(应用程序组件):1、Intents and Intent Filters(意图和意图过滤器)

    1.Intents and Intent Filters(意图和意图过滤器) 1.0.Intents and Intent Filters(意图和意图过滤器) An Intent is a messa ...

  6. 网络编程 -- RPC实现原理 -- RPC -- 迭代版本V3 -- 远程方法调用 整合 Spring

    网络编程 -- RPC实现原理 -- 目录 啦啦啦 V3——RPC -- 远程方法调用 及 null的传输 + Spring 服务提供商: 1. 配置 rpc03_server.xml 注入 服务提供 ...

  7. 使用WPF Animated GIF实现GIF图片的播放

    这个类库很方便,也很简单:http://wpfanimatedgif.codeplex.com/ 参考博客:http://blog.csdn.net/gqqnb/article/details/721 ...

  8. Spring task定时任务执行一段时间后莫名其妙停止的问题

    前因: 我写了一个小项目,主要功能是用Spring task定时任务每天定时给用户发送邮件.执行了几个月一直没有问题,前几天,莫名其妙的突然不再发送邮件了. 只好花费一些时间来查看到底是什么原因造成的 ...

  9. 用addOnGlobalLayoutListener获取View的宽高

    首先,我们在onCreate方法里调用getHeight()和 getWidth()是不能正确获取View的宽高的,因为onCreate方法执行完了,我们定义的控件才会被onMeasure()度量,所 ...

  10. 【SpringCloud错误】错误记录

    org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates ...