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   喝咖啡就蒜瓣儿  阅读(2928)  评论(0编辑  收藏  举报

努力加载评论中...

导航

点击右上角即可分享
微信分享提示