命名空间和类型具有“成员”。通常可以通过限定名来访问实体的成员。限定名以对实体的引用开头,后跟一个“.
”标记,再接成员的名称。
类型的成员或者是在该类型中声明的,或者是从该类型的基类“继承”的。当类型从基类继承时,基类的所有成员(实例构造函数、析构函数和静态构造函数除外)都成为派生类型的成员。基类中关于成员的可访问性的声明不能控制该成员是否可继承:继承性适用于任何成员,只要它们不是实例构造函数、静态构造函数或析构函数。然而,在派生类中可能不能访问已被继承的成员,原因或者是因为其已声明可访问性,或者是因为它已被类型本身中的声明所隐藏。
派生类继承基类的所有成员(除构造函数和析构函数),new用来隐藏基类成员,override用来重写基类成员方法。然而隐藏和重写都不能改变一个事实:
基类的所有成员(实例构造函数、析构函数和静态构造函数除外)在派生类中一个也不能少。
例如:
Fruit |
Private string name |
Protected string color |
Internal int amount |
Public int price |
Private void Fn01() (虚拟成员或抽象成员不能是私有的,所以不能用virtual关键字) |
Protected (virtual) void Fn02() |
Internal (virtual) void Fn03() |
Public (virtual) void Fn04() |
Apple : Fruit |
|
Private string name |
派生类中不可见,可以声明一个同名字段(不用new关键字),两个字段各不相干。 |
Protected string color |
派生类中可见,声明一个同名字段将隐藏它(最好用new)。如果不声明同名字段,那么this.color和base.color指的是同一个值。 |
Internal int amount |
派生类中可见,声明一个同名字段将隐藏它(最好用new)。如果不声明同名字段,那么this.amount和base.amount指的是同一个值。 |
Public int price |
派生类中可见,声明一个同名字段将隐藏它(最好用new)。如果不声明同名字段,那么this.price和base.price指的是同一个值。 |
Private void Fn01() 虚拟成员或抽象成员不能是私 有的,所以不能用virtual关键字 |
派生类中不可见,可以声明一个同名方法(不用new关键字),两个方法各不相干。 |
Protected (virtual) void Fn02() |
派生类中可见,new一个同名方法将隐藏它,override将重写它 |
Internal (virtual) void Fn03() |
派生类中可见,new一个同名方法将隐藏它,override将重写它 |
Public (virtual) void Fn04() |
派生类中可见,new一个同名方法将隐藏它,override将重写它 |