C#的继承规则如下。
1)除object类外,每个类有且只有一个基类。如果在程序中没有显式指定类的基类,那么它的直接基类就是object。
2)无论基类成员的访问性如何,所有的基类成员都能被其子类所继承,构造函数和析构函数除外。但是需要注意的是,虽然子类能够继承基类的成员,但是不能保证在子类中可以使用这些成员,这取决于成员的可访问性,具体说明如下。
在基类内的public、internal、protected、internal protected成员被继承后,在子类中仍然是上述访问性成员,并且在子类中可用。
在基类内的private成员被继承后,在子类中依旧是private成员,但是在子类中不可用。
例如在10.1.2所示的代码中,nn类能从基类mm继承如下变量成员。
变量aa:类型为protected,所以在子类nn中可用。
变量bb:类型为protected,所以在子类nn中可用。
变量cc:类型为private,所以在子类nn中不可用。
3)子类可以扩展它的直接基类,能够在继承基类的基础上添加新的成员,但是不能删除集成成员的定义。看下面的一段代码:
在上述代码中,虽然子类nn继承了基类mm的aa、bb和cc三个成员,但是在子类nn中仍然可以声明int类型成员Width、int类型成员mianji()。虽然能够在子类中新增成员,但是不能删除继承的aa、bb和cc这三个成员。(www.xing528.com)
4)继承是可以传递的。例如,如果C从B派生,而B从A派生,那么C就会继承在B中声明的成员,也能继承在A中声明的成员。但是各类中使用这些成员时,也需要遵循成员的可访问性。具体说明如下。
在类A和B内的public、internal、protected、internal protected成员,在C中依旧是上述访问性成员,并且在C中可用。
在A和B内的private成员被继承后,在C中依旧是private的成员,但是在C中不可用。
5)不能循环继承类。例如,下面的代码是错误的:
因为上述代码中的类存在循环依赖关系,所以运行后将会出现编译错误。同样,下面的代码也是错误的:
6)类的直接基类必须至少和类的本身具有相同的可访问性。例如下面的代码是错误的:
因为如果基类的可访问性小于子类的可访问性,就没有继承的必要了。
7)在派生子类中可以声明与继承基类成员相同名称的成员,这样就将基类中的这些成员隐藏了。
8)类可以声明虚方法、虚属性和虚索引器,派生子类可以重写上述虚成员。
9)C#子类只能继承一个直接基类,但是支持基于接口的多重继承。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。