C++继承方式总共分为以下几种:
public、private、protected三种(它们直接影响到派生类的成员、及其对象对基类成员访问的规则)。
(1)public(公有继承):继承时保持基类中private成员被隐藏,其它各成员属性不变,被继承为派生类的成员。so派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象只能访问基类中的public成员。
(2)private(私有继承):继承时基类中private成员被隐藏,其它各成员属性均变为private,被继承为派生类的成员。派生类的成员也只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。
(3)protected(保护性继承):继承时基类中private成员被隐藏,其它各成员属性均变为protected,被继承为派生类的成员。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。
但是C#的继承只能通过成员变量的权限控制来实现。
在C++中,一个变量如果通过不同的继承方式,那么它在继承的过程中可访问程度会发生很大变化。
如
Class A { public int a1(){}; protected int a2(){}; private int a3(){}; } Class B1:protected A { a1;//可访问,变为自身的preotected a2;//可访问,变为自身的preotected //a3;不可访问 } Class B2:private A { a1;//可访问,变为自身的private a2;//可访问,变为自身的private //a3;不可访问 } Class C1:protected B1 { a1;//是B1的保护成员,被继承,变为自身的保护成员 a2;//是B1的保护成员,被继承,变为自身的保护成员 } Class C2:protected B2 { //a1;是B2的私有成员,已经无法再被继承 //a2;是B2的私有成员,已经无法再被继承 } |
所以,一个可以被继承的成员变量在不同的继承方式中,最后有可能丢失无法再被继承。而C#中,没有继承方式的概念。一个成员变量如果可以被继承,那么他就会被派生类一直继承。
就像一个家族的传家之宝,C++中由于某一代的原因,这个传家之宝可能会不传给下一代,致使后代都得不到。而C#中,这个传家之宝会一直被传递下去(除非在传递过程中发生其它的人为因素)。
当然了,本文的探究仅限于继承的可访问性
(后继文章将就C#的成员修饰符做一定的简要分析)