1 , 2 , 3 , 答案揭晓
![C#中子类对基类方法的继承、重写和隐藏](http://img.jiangsulong.com/220421/032F53562-2.jpg)
文章插图
是不是有点出乎意料呢 , 让我们来分析一下
![C#中子类对基类方法的继承、重写和隐藏](http://img.jiangsulong.com/220421/032F51029-3.jpg)
文章插图
【C#中子类对基类方法的继承、重写和隐藏】首先 , 三次调用均是callvirt , 而且方法 Greeting 是虚方法 , 我们需要考虑对象实例以决定要调用的方法 。
- 在第一次调用中 , 引用变量类型是Person , 虽然对象实例类型Manger重写了Greeting方法 , 但是它重写的是继承自Manger基类Emplyee的Greeting方法 , Person中Greeting方法在子类Manger中仅仅是被隐藏而没有被重写 , 所以这里调用的是Person中的Greeting
- 而第二次调用中 , 引用变量类型是Employee , Employee的Greeting方法被Manager重写 , 所以这次调用到的是Manager中的Greeting
- 最后一次调用毋庸多言 , 简单的重写案例而已
总结在子类对基类有方法继承、重写和隐藏的情况下 , 有时候判断具体哪个方法被调用会有难度 , 但请记住以下要点:
- 如果被调用方法非虚 , 那么只用关注引用变量类型就好 , 引用变量类型能决定调用方法在哪里
- 如果调用方法为虚 , 我们需要站在引用变量类型的角度 , 审视该方法是否被对象类型所重写;若是 , 则调用对象类型的重写方法;反之 , 则再次让引用变量类型决定调用方法 。
原文作者:老胡写代码
原文地址:https://www.cnblogs.com/deatharthas/p/13378708.html
推荐阅读
- Go发送机器人通知
- 三国魏蜀吴最后谁完成了统一中国 蜀汉和东吴为什么不联手灭曹
- 玄武门之变李元吉怎么死的 在玄武门之变中,是谁亲手杀死了李元吉
- Winform界面开发中的困境及解决方案
- 喝铁观音有哪些禁忌,哪些茶对人体有害禁忌喝
- 微服务架构下分布式事务处理方案选择和对比
- 什么是数据结构
- |工作中,总有这样那样的新问题
- 腊八节的由来,中国三峡第四届茶文化艺术节将于15日开幕,茶文化
- 舒蕾洗发水价格是多少