C++和C#中隐藏方法的区别

来源:互联网 发布:干部网络考试答案 编辑:程序博客网 时间:2024/05/21 08:00

本文首先介绍两种语言中隐藏方法的实现,然后对这两种方法所产生的结果进行解释。

C++中的隐藏方法:

1.      基类和派生类的函数名相同,参数列表不同,此时不论是否有virtual,基类方法被隐藏。

2.      基类和派生类的函数签名完全相同,但基类方法没有virtual关键字,此时基类方法被隐藏。

C#中的隐藏方法:

1.      基类和派生类的函数签名完全相同,此时除非同时有virtual和override关键字时产生方法覆盖,其他可以编译成功的情况皆为方法隐藏。

2.      在函数名相同,但参数列表不同的情况下,不会发生隐藏,此时即使使用new关键字,编译器也会告诉你new是无效的。这一点和C++是不一样的,也就是说,C#只有在签名完全相同的情况下才会发生隐藏和覆盖的情况。

 

C++中隐藏方法的结果:

使用基类指针指向派生类对象时,基类的同名方法被隐藏。

使用派生类对象直接调用方法时,基类的同名方法被隐藏。

这两种情况的意思是,只要调用的方法是派生类中没有的,就会报编译错误,如果派生类有且基类中也有,那么就会调用派生类的方法。

 

C#中隐藏方法的结果:

使用基类对象引用派生类实体时,基类的同名方法被隐藏。

 

总结:

1.      C++只要函数名相同,就会发生方法隐藏,除非签名完全相同且使用virtual关键字,此时是覆盖,也叫多态。而C#只有在签名完全相同,且同时没有virtual和override时才会发生隐藏。

2.      两种语言发生覆盖的条件都是签名完全相同,且C++要有virtual关键字,而C#要有virtual和override关键字。

3.      重载是发生在同一个类中的,函数名相同,但签名不同的函数。根据调用方的实参类型,静态绑定函数入口的技术。

0 0