//隐藏:在子类中创建与父类中的方法具有相同签名(相同的方法名,相同的参数列表-参数类型和次序)的方法(可以带有"virtual"或"override"关键字)即可实现,但建议使用"new"关键字,以明确地隐藏。
//只能使用"override"关键字来覆盖(override)父类中标记为"virtual"、"abstract"或"override"的方法,而子类中标记为override的方法,也必须是父类中标记为"virtual"、"abstract"或"override"的方法。
//覆盖(override):必须使用override关键字,可以被覆盖的方法包括标记为abstract,virtual,和override的方法;
//隐藏:使用new关键字,也可不使用关键字,可以被隐藏的方法包括一般方法,和标记为virtual"或"override"的方法;
//重载(overload):不需要任何特殊的关键字
//静态方法可以被隐藏或重载
/*重载,覆盖,隐藏之间的区别
重载(overload)用于同一类中的成员函数,其特征为:
* 1)在同一类中
* 2)相同的函数名
* 3)参数不同(包括参数类型不同,或参数个数不同,或两者都不同,注意:和返回值没关系)
* 4)和是否虚函数无关
覆盖(override)是指派生类函数覆盖基类函数,其特征为:
* 1)不同的范围(分别位于派生类与基类)
* 2)相同的函数名称
* 3)参数相同
* 4)基类函数必须是虚函数
隐藏(hide)是指派生类的函数屏蔽了与其同名的基类函数,其特征为:
* 1)不同的范围(分别位于派生类与基类)
* 2)相同的函数名
(3)若参数不同,基类函数无virtual关键字,基类函数将会被隐藏。(因为派生类和基类不在同一范围,所以是隐藏而不是重载);
()若参数不同,基类函数有virtual关键字。基类函数将会被隐藏。(因为派生类和基类不在同一范围,所以是隐藏而不是重载;因为参数不同,所以是隐藏而不是覆盖);
()若参数相同,基类函数无virtual关键字。基类函数将会被隐藏。(因为基类函数不是虚函数,所以是隐藏而不是覆盖)。
()若参数相同,基类函数有virtual关键字。如果基类函数有多个重载版本,且派生类并没有重写所有的同名虚函数,当在派生类中调用函数时,基类中未被重写的虚函数将被隐藏。(当然,被重写的函数就是覆盖了)。
注意: 如果想在派生类中调用基类中的被隐藏的函数,可以在派生类中填写如下代码:using Base::Fun2
*/
c#的重载、覆盖、隐藏
最新推荐文章于 2025-08-10 21:48:21 发布