c#发展

注册

 

发新话题 回复该主题

在NET中,C基类编写虚方法,而在子 [复制链接]

1#
C#核心开发-第15单元-接口和继承-第3节:虚方法和重写方法C#核心开发-虚方法和重写方法1.方法重写在编写C#程序时,有时候需要在子类中编写与基类同名的方法,但并不需要基类方法中的逻辑代码,此时就需要重写基类的方法来实现。C#方法重写是指在子类中将基类中的同名方法代码覆盖掉,使用新的逻辑代码替代。C#方法重写的前提条件有以下2条:(1).重写的方法在基类必须是虚方法。(2).在子类中重写基类的方法名称必须相同。1.1.虚方法现在我们来具体学习一下如何重写C#方法,首先在基类中创建一个虚方法,虚方法要使用virtual关键字定义,如下图所示:编写虚方法-图1基类中编写虚方法的完整代码如下:namespaceYidosoft.Edu.Csharp.Inherit{///summary///基类:人类////summarypublicclassPerson{//虚方法publicvirtualdoubleTotal(intsum,doubleprice){doubled=sum*price;returnd;}}}在图1中,在Person基类中创建了一个名称为Total的虚方法,虚方法要定义在基类中,且必须使用virtual关键字定义。C#虚方法在调用时与普通方法是一样的,只是虚方法可以在子类中重写而已。1.2.重写方法现在我们在Person的子类中重写Total()方法的逻辑代码,在C#中重写方法要使用override关键字,如下图所示:重写方法提示-图2图2的代码说明如下:(1).Teacher类继承了Person基类。(2).在子类的方法上使用override关键字时,VS的智能提示就会将可以重写的方法列出来,选择需要重写的方法名即可。(3).重写的方法名,参数列表是不可以改变的,只能改变方法体中的代码。(4).子类中重写的方法也可以调用基类的方法,使用base关键字即可。override关键字-图3VisualStudio给出的重写方法代码:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceYidosoft.Edu.Csharp.Inherit{publicclassTeachererson{publicoverridedoubleTotal(intsum,doubleprice){returnbase.Total(sum,price);}}}图3是VS给出的代码,还是调用的基类的方法,现在我们修改一下:重写代码逻辑-图4在图4中已经修改了原Total()方法中的代码逻辑,完整代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceYidosoft.Edu.Csharp.Inherit{publicclassTeachererson{publicoverridedoubleTotal(intsum,doubleprice){doubleresult=0;doubled=sum*price;if(d){result=d*0.6;}else{result=d*0.8;}returnresult;}}}现在调用一下基类的Total()方法和子类重写后的Total()方法:调用虚方法和重写方法-图5在C#中调用基类和子类的代码如下:Personp=newPerson();doubler1=p.Total(,);Console.WriteLine($基类Total()方法执行后的结果:{r1});Teachert=newTeacher();doubler2=t.Total(,);Console.WriteLine($子类Total()方法执行后的结果:{r2});Console.ReadKey();在图5中,给基类和子类的同名方法传一样的值,现在运行一下结果:虚方法和重写方法调用后输出的结果-图6在两个同名方法传入同样的值,经方法逻辑计算后,得到的结果不一样,这说明2个方法的逻辑代码是不一样的。因此,在C#开发中,当我们需要在子类中得到与基类同名方法不一样的结果,就可以采用基类编写虚方法,而在子类中重写该方法,从而改变虚方法原来的业务逻辑代码。C#深入编程-线上视频图文课堂配套课后技能作业+理论考试+源码淘宝¥购买已下架
分享 转发
TOP
发新话题 回复该主题