C++ 和C# 继承机制的差异之浅见

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#的成员修饰符做一定的简要分析)

你可能感兴趣的:(.net)