1、屏蔽基类的成员
全部类都派生自object类。
虽然类只能直接继承一个基类,但继承的层次没有限制。
虽然派生类不能删除它继承的任何成员,但能够用与基类同名的成员来屏蔽(mask)基类成员。
1. 要屏蔽一个继承的数据成员,须要声明一个新的同类型成员,并使用相同名称。
2. 经过在派生类中声明新的带有相同签名的函数成员,能够隐藏或屏蔽继承的函数成员。
3. 要让编译器知道你在故意屏蔽继承的成员,使用new修饰符。不然,程序能够成功编译,但编译器会警告你隐藏了一个继承的成员。
4. 也可屏蔽静态成员。
示例:ide
若是派生类必须彻底的访问被隐藏的继承成员,可使用基类访问(base access):
base.成员名称函数
2、使用基类的引用
若是有一个派生类对象的引用,就能够获取该对象基类部分的引用。经过基类部分的引用只能访问到基类的成员,而不能访问到派生类的成员。
示例:this
图示:spa
若是但愿经过基类的引用能访问到派生类的成员,该怎么作呢?
使用虚方法和覆写方法!设计
1. 使用虚方法和覆写方法的条件:
(1)派生类的方法和基类的方法有相同的签名和返回类型。
(2)基类的方法使用virtual标注。
(3)派生类的方法使用override标注。
示例:3d
2. 使用虚方法和覆写方法的限制:
(1)覆写和被覆写的方法必须有相同的可访问性。换句话说,当被覆写为private时,覆写方法不能是public等。
(2)不能覆写static方法和非虚方法。
(3)方法、属性和索引器,以及另外一种成员类型事件,均可以被声明为virtual和override。
3. 覆写方法能够在继承的任何层次出现。
(1)当使用对象基类部分的引用调用一个覆写的方法时,方法的调用被沿派生层次上溯执行,一直到标记为override的方法的最高派生(most-derived)版本。
(2)若是在更高的派生级别有该方法的其余声明,但没有被标记为override,那么它们不会被调用。对象
3、构造函数的执行
1. 建立一个实例过程当中的第一件事是初始化对象的全部实例成员。而后调用基类的构造函数,最后执行该类本身的构造函数。继承层次链中的每一个类在执行它本身的构造函数体以前执行它的基类构造函数。
图示:blog
2. 当基类有多个构造函数时,使用关键字base并指明使用哪个基类构造函数。
当派生类有多个构造函数时,使用关键字this并指明应该使用当前类的哪个构造函数。
示例:继承
4、成员访问修饰符
1. 类的可访问性只有两种修饰符:
internal
public
2. 成员的可访问性有5个访问级别:
public
private
protected
internal
protected internal
3. 全部显式声明在类声明中的成员都是相互可见的,不管它们的访问性如何。
必须对每一个成员指定访问级别。若是不指定,它默认的隐式访问级别为private。
成员不能比它的类有更高的可访问性。
图示:索引
5、抽象类
1. 抽象成员
抽象成员指设计为被覆写的函数成员。抽象成员有如下特征:
(1)必须是一个函数成员,即字段和常量不能是抽象成员。
(2)必须用abstract修饰。
(3)不能有实现代码块。代码用分号表示。
(4)共有4个类型的成员能够声明为抽象:方法、属性、事件、索引。
(5)尽管抽象成员必须在派生类中被覆写,但不能把virtual和abstract合用。
(6)相似虚成员,派生类中抽象成员的实现必须指定override修饰符。
2. 抽象类
抽象类指设计为被继承的类。抽象类只能被用做其余类的基类。
(1)不能建立抽象类的实例。
(2)抽象类使用abstract标识。
(3)抽象类能够包含抽象成员和普通的非抽象成员。
(4)抽象类能够派生自另外一个抽象类。
(5)任何派生自抽象类的类必须使用override关键字实现该类全部的抽象成员,除非派生类本身也是抽象类。
示例:
6、密封类
抽象类必须用做基类,它不能被实例化。
密封类与抽象类相反。
密封类只能被用做独立的类,不能用做基类(被继承)。
密封类使用sealed修饰符标注。
7、静态类
静态类中全部成员都是静态的。
静态类用于存放不受实例数据影响的数据和函数。
静态类常见用途就是建立一个包含一组数学方法和值的数学库。
(1)静态类自己必须标记为static。
(2)类的全部成员必须是静态的。
(3)类能够用一个静态构造函数,但不能有实例构造函数,不能建立该类的实例。
(4)静态类是隐式密封的,即不能继承静态类。
8、扩展方法
扩展方法容许编写的方法和声明它的类以外的类关联。
扩展方法的重要要求以下:
(1)声明扩展方法的类必须声明为static。
(2)扩展方法自己必须声明为static。
(3)扩展方法必须包含关键字this做为它的第一个参数类型,并在后面跟着它所扩展的类的名称。
示例: