首页 理论教育 C#继承规则及注意事项

C#继承规则及注意事项

时间:2023-10-22 理论教育 版权反馈
【摘要】:C#的继承规则如下。在基类内的public、internal、protected、internal protected成员被继承后,在子类中仍然是上述访问性成员,并且在子类中可用。例如在10.1.2所示的代码中,nn类能从基类mm继承如下变量成员。虽然能够在子类中新增成员,但是不能删除继承的aa、bb和cc这三个成员。4)继承是可以传递的。5)不能循环继承类。7)在派生子类中可以声明与继承基类成员相同名称的成员,这样就将基类中的这些成员隐藏了。

C#继承规则及注意事项

C#的继承规则如下。

1)除object类外,每个类有且只有一个基类。如果在程序中没有显式指定类的基类,那么它的直接基类就是object。

2)无论基类成员的访问性如何,所有的基类成员都能被其子类所继承,构造函数和析构函数除外。但是需要注意的是,虽然子类能够继承基类的成员,但是不能保证在子类中可以使用这些成员,这取决于成员的可访问性,具体说明如下。

978-7-111-36370-5-Part02-295.jpg在基类内的public、internal、protected、internal protected成员被继承后,在子类中仍然是上述访问性成员,并且在子类中可用。

978-7-111-36370-5-Part02-296.jpg在基类内的private成员被继承后,在子类中依旧是private成员,但是在子类中不可用。

例如在10.1.2所示的代码中,nn类能从基类mm继承如下变量成员。

978-7-111-36370-5-Part02-297.jpg变量aa:类型为protected,所以在子类nn中可用。

978-7-111-36370-5-Part02-298.jpg变量bb:类型为protected,所以在子类nn中可用。

978-7-111-36370-5-Part02-299.jpg变量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中声明的成员。但是各类中使用这些成员时,也需要遵循成员的可访问性。具体说明如下。

978-7-111-36370-5-Part02-301.jpg在类A和B内的public、internal、protected、internal protected成员,在C中依旧是上述访问性成员,并且在C中可用。

978-7-111-36370-5-Part02-302.jpg在A和B内的private成员被继承后,在C中依旧是private的成员,但是在C中不可用。

5)不能循环继承类。例如,下面的代码是错误的:

因为上述代码中的类存在循环依赖关系,所以运行后将会出现编译错误。同样,下面的代码也是错误的:

6)类的直接基类必须至少和类的本身具有相同的可访问性。例如下面的代码是错误的:

因为如果基类的可访问性小于子类的可访问性,就没有继承的必要了。

7)在派生子类中可以声明与继承基类成员相同名称的成员,这样就将基类中的这些成员隐藏了。

8)类可以声明虚方法、虚属性和虚索引器,派生子类可以重写上述虚成员。

9)C#子类只能继承一个直接基类,但是支持基于接口的多重继承。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈