C#成员的继承

命名空间和类型具有“成员”。通常可以通过限定名来访问实体的成员。限定名以对实体的引用开头,后跟一个“.”标记,再接成员的名称。

类型的成员或者是在该类型中声明的,或者是从该类型的基类“继承”的。当类型从基类继承时,基类的所有成员(实例构造函数、析构函数和静态构造函数除外)都成为派生类型的成员。基类中关于成员的可访问性的声明不能控制该成员是否可继承:继承性适用于任何成员,只要它们不是实例构造函数、静态构造函数或析构函数。然而,在派生类中可能不能访问已被继承的成员,原因或者是因为其已声明可访问性,或者是因为它已被类型本身中的声明所隐藏。

派生类继承基类的所有成员(除构造函数和析构函数),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将重写它

posted on 2009-12-18 16:58  喝咖啡就蒜瓣儿  阅读(2924)  评论(0编辑  收藏  举报

导航