C#图解教程学习笔记——类和继承
一、屏蔽基类的成员
所有类都派生自object类。
虽然类只能直接继承一个基类,但继承的层次没有限制。
虽然派生类不能删除它继承的任何成员,但可以用与基类同名的成员来屏蔽(mask)基类成员。
1. 要屏蔽一个继承的数据成员,需要声明一个新的同类型成员,并使用相同名称。
2. 通过在派生类中声明新的带有相同签名的函数成员,可以隐藏或屏蔽继承的函数成员。
3. 要让编译器知道你在故意屏蔽继承的成员,使用new修饰符。否则,程序可以成功编译,但编译器会警告你隐藏了一个继承的成员。
4. 也可屏蔽静态成员。
示例:

如果派生类必须完全的访问被隐藏的继承成员,可以使用基类访问(base access):
base.成员名称
二、使用基类的引用
如果有一个派生类对象的引用,就可以获取该对象基类部分的引用。通过基类部分的引用只能访问到基类的成员,而不能访问到派生类的成员。
示例:

图示:

如果希望通过基类的引用能访问到派生类的成员,该怎么做呢?
使用虚方法和覆写方法!
1. 使用虚方法和覆写方法的条件:
(1)派生类的方法和基类的方法有相同的签名和返回类型。
(2)基类的方法使用virtual标注。
(3)派生类的方法使用override标注。
示例:

2. 使用虚方法和覆写方法的限制:
(1)覆写和被覆写的方法必须有相同的可访问性。换句话说,当被覆写为private时,覆写方法不能是public等。
(2)不能覆写static方法和非虚方法。
(3)方法、属性和索引器,以及另一种成员类型事件,都可以被声明为virtual和override。
3. 覆写方法可以在继承的任何层次出现。
(1)当使用对象基类部分的引用调用一个覆写的方法时,方法的调用被沿派生层次上溯执行,一直到标记为override的方法的最高派生(most-derived)版本。
(2)如果在更高的派生级别有该方法的其他声明,但没有被标记为override,那么它们不会被调用。
三、构造函数的执行
1. 创建一个实例过程中的第一件事是初始化对象的所有实例成员。然后调用基类的构造函数,最后执行该类自己的构造函数。继承层次链中的每个类在执行它自己的构造函数体之前执行它的基类构造函数。
图示:

2. 当基类有多个构造函数时,使用关键字base并指明使用哪一个基类构造函数。
当派生类有多个构造函数时,使用关键字this并指明应该使用当前类的哪一个构造函数。
示例:

四、成员访问修饰符
1. 类的可访问性只有两种修饰符:
internal
public
2. 成员的可访问性有5个访问级别:
public
private
protected
internal
protected internal
3. 所有显式声明在类声明中的成员都是相互可见的,无论它们的访问性如何。
必须对每个成员指定访问级别。如果不指定,它默认的隐式访问级别为private。
成员不能比它的类有更高的可访问性。
图示:

五、抽象类
1. 抽象成员
抽象成员指设计为被覆写的函数成员。抽象成员有以下特征:
(1)必须是一个函数成员,即字段和常量不能是抽象成员。
(2)必须用abstract修饰。
(3)不能有实现代码块。代码用分号表示。
(4)共有4个类型的成员可以声明为抽象:方法、属性、事件、索引。
(5)尽管抽象成员必须在派生类中被覆写,但不能把virtual和abstract合用。
(6)类似虚成员,派生类中抽象成员的实现必须指定override修饰符。
2. 抽象类
抽象类指设计为被继承的类。抽象类只能被用作其他类的基类。
(1)不能创建抽象类的实例。
(2)抽象类使用abstract标识。
(3)抽象类可以包含抽象成员和普通的非抽象成员。
(4)抽象类可以派生自另一个抽象类。
(5)任何派生自抽象类的类必须使用override关键字实现该类所有的抽象成员,除非派生类自己也是抽象类。
示例:

六、密封类
抽象类必须用作基类,它不能被实例化。
密封类与抽象类相反。
密封类只能被用作独立的类,不能用作基类(被继承)。
密封类使用sealed修饰符标注。
七、静态类
静态类中所有成员都是静态的。
静态类用于存放不受实例数据影响的数据和函数。
静态类常见用途就是创建一个包含一组数学方法和值的数学库。
(1)静态类本身必须标记为static。
(2)类的所有成员必须是静态的。
(3)类可以用一个静态构造函数,但不能有实例构造函数,不能创建该类的实例。
(4)静态类是隐式密封的,即不能继承静态类。
八、扩展方法
扩展方法允许编写的方法和声明它的类之外的类关联。
扩展方法的重要要求如下:
(1)声明扩展方法的类必须声明为static。
(2)扩展方法本身必须声明为static。
(3)扩展方法必须包含关键字this作为它的第一个参数类型,并在后面跟着它所扩展的类的名称。
示例:

C#图解教程学习笔记——类和继承的更多相关文章
- C#图解教程学习笔记——类相关的概念
一.一些基本概念1. 字段:隶属于类的变量,即类的成员变量.2. 方法:隶属于类的函数,即类的成员函数.3. 实例成员:类的每个实例拥有自己的各个类成员的副本,这些成员称为实例成员. 改变一个实例字段 ...
- ES6-11学习笔记--类与继承
ES5 中的类与继承: 类的定义: function People(name, age) { // this指向当前实例化对象 console.log(this); // 实例属性 this.name ...
- C#图解教程学习笔记——转换
一.什么是转换转换(conversion)是指接受一个类型的值并使用它作为另一个类型的等价值的过程.转换后的值应和源值是一样的,但其类型为目标类型. 二.隐式转换和显式转换(强制转换)1. 隐式转换( ...
- C#图解教程学习笔记——接口
一.接口概念接口是指定一组函数成员而不实现它们的引用类型.所以只能类和结构来实现接口. 二.声明接口1. 接口声明不能包含:数据成员.静态成员,只能包含以下类型的非静态成员函数:方法.属性.事件.索引 ...
- C#图解教程学习笔记——方法
一.字段和本地变量.本地常量字段:隶属于类的变量,即类的成员变量.本地变量:于保存本地的或临时的计算数据,即局部变量.本地常量:必须声明在块内部,声明时必须初始化,声明后不能改变.实例字段与本地变量区 ...
- C#图解教程学习笔记——数据类型与数据存储
一.数据类型1. 预定义类型C#提供16种预定义类型,包括13种简单类型和3种非简单类型:(1)简单类型<1>11种数值类型: 不同长度的有符号和无符号整数类型 浮点数的float和dou ...
- C#图解教程学习笔记——事件
一.事件的定义事件:当一个特定的程序事件发生时,程序的其他部分可以得到该事件已经发生的通知,同时运行相应处理程序.事件的很多部分都与委托类似.实际上,事件就像专门用于特殊用途的简单委托.事件包含了一个 ...
- C#图解教程学习笔记——委托
一.委托概述委托和类一样,是用户自定义类型,也是引用类型.但类表示的是数据和方法的集合,而委托持有一个或多个方法,以及一系列预定义操作. 可以通过以下操作步骤来使用委托:(1)声明一个委托类型.委托声 ...
- 【C#图解教程学习笔记】第13章 委托
13.1 什么是委托 委托是持有一个或多个方法的对象,可将一个方法传递到另一个方法. 委托是用户自定义的引用类型. 13.2 委托概述 类表示的是数据和方法的集合,而委托持有一个或多个方法,以及一系列 ...
随机推荐
- ThinkPHP函数I代码优化
ThinkPHP/Common/common.php 文件 I函数,主要用来获取一些gpc请求的变量的,函数有一部分代码是过滤变量的,每次都运行一次,其实是没有必要的. 如果你每次都像这样的方式调用的 ...
- HOJ_14001 Just Terraffic!
题意相对来说比较扭曲..所以来说下模型,具体做法有兴趣的孩纸去问度娘或者波塞冬吧~~ 给出一个序列长度,并且输入该序列,该序列的含义是横坐标: 任何两个相邻坐标绝对值小于等于1000的必然为一个整体, ...
- Keepalivaed +Nginx proxy 高可用架构方案与实施过程细节
1.开源产品介绍 1)CMS介绍 官方网站http://www.dedecms.com/,是一个网站应用系统构建平台,也是一个强大的网站内容管理系统,既可以用来构建复杂的体系的企业信息门户或者电子商务 ...
- hive实现根据用户分组,按用户记录求上下两条记录的时间差
在mysql,数据如下:#查询某一用户该日抽奖时间 select draw_time from user_draw_log where user_id = 1 and draw_date='2016- ...
- java十分钟速懂知识点——引用
一.由健忘症引起的问题 今天闲来没事在日志中瞟见了个OutOfMemoryError错误,不由得想到前一段时间看到一篇面经里问到Java中是否有内存泄露,这个很久以前是留意过的,大体记得内存溢出和内存 ...
- 【小程序入门集锦】19,微信小程序个人帐号申请
个人账号与企业帐号相比,缺少支付等功能,与个人订阅号类似. 小程序开放个人开发者申请注册,个人用户可访问微信公众平台,扫码验证个人身份后即可完成小程序帐号申请并进行代码开发. 下面我们就来说说 ...
- Android stadio 调试太掉了
1.evalute expresstion 可以看任何变量的任何属性,就算是一个字符串url,你可以url.length(),你不用输入完就有提示.对象的方法有提示! 2.调试技巧 就是当一行里面有很 ...
- 在 Amazon AWS 搭建及部署网站:序
最近玩了把 AWS,实现了服务器的创建.PHP+MySql运行环境.代码部署等.一方面,后面的项目会反复重复这个流程,需要一份手册,另一方面,也给自己一个记录.于是把整个过程和要点整理一下,发到自己的 ...
- C#操作XML配置文件
代码为C#操作xml配置文件的范例类,函数SetValue用于向配置文件写入一个值,GetValue用于根据Key获取相应值。这种方法的配置文件不需要手动创建,程序在运行后会自动处理创建。 注意:1. ...
- Android数据储存之SQLiteDatabase SQLiteOpenHelper类的简单使用
SQLiteOpenHelper 简介: SQLiteOpenHelper是一个借口!所以不能直接实例化!那我们想要得到SQLiteOpenHelper对象就需要实现该接口!创建该接口的实现类对象! ...