• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#非常重要基础之多态

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

前几天看了一位同志的博客,写的是关于他自己去支付宝面试的经历。过程大体是这样的:问答的时候,前面部分,作者都应答如流,说起自己经验如何之丰富,最后面试官问了作者一个问题:请简述多态的概念和作用。结果这位作者竟然说这么基础的问题还真不记得了,于是,面试失败。

其实多态,是个很基础的,也非常重要的概念,作为程序开发者,这些基础的概念必须非常牢固,在开发的过程中,才能得心应手。

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。举个通俗的例子:摩托车和汽车都是车子的派生类,如果我在另一个类中需要调用车子的刹车方法,那么我只需要把车子的对象传参数进去,然后调用“刹车()”方法即可。而摩托车和汽车的刹车的方法实现不同,虽然都叫“刹车”,但一个是手抓,一个是脚踩。但我们调用的时候不需要知道具体的实现,只管根据名称调用即可,具体则根据示例的不同,而有不同的刹车方法的实现。

多态分为两种:编译时的多态,和运行时的多态

编译时的多态:是通过重载来实现的。重载,即方法名称相同,而参数的类型不同,或者参数的个数不同。最典型的重载是我们常用的“message”类下面的方法“show()”,一个参数代表弹出的信息内容,第二个参数代表弹窗标题,等等。

运行时的多态:通过虚成员的方式实现。在继承关系里面,子类会继承父类所有的属性,方法,事件。那么如果子类需要更改某个方法(通俗的讲,可以理解为子类需要一个和父类中同名的方法,但不同的实现),有两种方法。而这两种方法的区别,非常重要。

  1. 使用New关键字。当子类中使用New关键字来覆盖父类中的同名方法时,父类的成员则被隐藏了,称为“隐藏成员”。
  2. 基类中将成员声明为虚成员。在基类成员的返回类型之前加关键字“virtual ”即可声明为虚拟成员。派生类,可以对虚拟成员进行重写,重写加关键字“override ”即可。同样可以实现替换基类的老成员。

那么,这两种方式有什么不同呢?

如果使用New来覆盖基类成员的时候,当派生类实例被转换为基类型使用的时候,调用的成员会是被New隐藏掉的隐藏成员,是旧的。而如果是通过虚成员重写的方式,那么调用的,会是被派生类重写之后的新成员。

明白了么?如果分不清楚,可以这样记:New覆盖,只是用新的换了旧的,旧的还是存在,重写,是把父类的也重新给写了。

明白这个区别之后,什么时候该怎么用,也明白了吧。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#获取存储过程返回值发布时间:2022-07-13
下一篇:
ProfessionalC#学习笔记(三c#对象和类型)发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap