2021-08-29

C#中的多态

C#是一种面向对象编程的语言,而面向对象编程语言都具有三大特性:封装、继承、多态。本文就C#如何实现多态展开讨论。
第一个,C#中的方法(函数)可以根据发送对象的不同而采取不同的行为方式,要知道在C语言中是不能同时出现两个同名的函数的,而在C#中却可以实现这一功能。C#通过判断同名函数的参数列表中参数数量、数据类型进行判定是否为同一个函数:
在这里插入图片描述

如上所示,ShowMax()函数最大的不同点就是其各自的参数列表中的数据类型,在参数数量相同的情况下,只要有一个参数数据类型不一致,就可已构成方法(函数)的多态;那在参数数量相同的情况又是怎样的呢,看下图:
在这里插入图片描述

这里分别为这3个近似的函数从上到下排个序①②③。可以看到①和②根本上就是一个函数,无论是函数名还是参数数量、参数数据类型都一致,细心的读者会发现②和①中参数是不一样的,其实,在编译过程中编译器是不会去通过函数形参去判断方法的异同的,学过C的可能也知道,在声明一个函数时甚至可以不设置形参,只需要把参数的数据类型设置好就可以了。言归正传,再来比较①和③,这里就比较好看懂,在参数数量不一致的情况下,是可以设置同类型的数据类型的,在明面意思上也很直观,判断是否为同一个函数,这里就不多多叙述了。那有人会问,这个方法的多态,有什么用呢。其实,这还得拿C来做比较,在C语言中,比较两个数的大小的时候,需要提前确定两个实参的数据类型,而且还得根据两个实参的数据类型的定义不同名字的参数,这就让实现比较大小的这个想法变得很复杂,所以若能通过方法的多态,只实现一个比较大小的函数,相信程序工作人员就不需要耗费太多的其他心思去考虑使用哪个函数进行比较。
第二个,子类重写父类的多态。比如说在子类继承父类中,最常见的就是,通过子类重写父类的方法,实现多态;已知在父类A中,定义了一个虚拟方法Printf:
在这里插入图片描述

在子类B中重写父类A中的Printf:
在这里插入图片描述

那么此时,下面这串代码输出的是什么呢:
在这里插入图片描述

此时输出的内容应该是“is B”
在这里插入图片描述

因为我使实例classA指向了ClassB的内存,所以当调用classA中的方法Printf()时,其实这个Printf()已经不再是ClassA中的Printf()了,它被修改为新的方法,唯一不变的就是,该方法只是被重写了,指针还是和ClassA中的Printf()的指针一样,所以ClassA的实例classA依然可以调用Printf()。
最后一个,就是子类继承父类,也就是说,父类定义的方法且允许被子类访问,子类就可以拿来用,
这也是多态的一种体现,可以提高代码的重用性和节省开发时间。
好了,以上就是,我对多态总体的概述和理解,希望对大家有帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值