C#多态实例详解

C#多态实例详解

ID:40531725

大小:15.16 KB

页数:4页

时间:2019-08-04

C#多态实例详解_第1页
C#多态实例详解_第2页
C#多态实例详解_第3页
C#多态实例详解_第4页
资源描述:

《C#多态实例详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、----C#多态实例详解----多态是面向对象编程中三大机制之一,其原理建立在"从父类继承而来的子类可以转换为其父类"这个规则之上,换句话说,能用父类的地方,就能用该类的子类.当从父类派生了很多子类时,由于每个子类都有其不同的代码实现,所以当用父类来引用这些子类时,同样的操作而可以表现出不同的操作结果,这就是所谓的多态.1.了解什么是多态性2.如何定义一个虚方法3.如何重载一个虚方法4.如何在程序中运用多态性面向对象程序设计中的另外一个重要概念是多态性。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。可以把一组对

2、象放到一个数组中,然后调用它们的方法,在这种场合下,多态性作用就体现出来了,这些对象不必是相同类型的对象。当然,如果它们都继承自某个类,你可以把这些派生类,都放到一个数组中。如果这些对象都有同名方法,就可以调用每个对象的同名方法。本节课将向你介绍如何完成这些事情。1.清单9-1.带有虚方法的基类:DrawingObject.csusingSystem;publicclassDrawingObject{publicvirtualvoidDraw(){Console.WriteLine("I'mjustagenericdrawi

3、ngobject.");}}说明清单9-1定义了DrawingObject类。这是个可以让其他对象继承的基类。该类有一个名为Draw()的方法。Draw()方法带有一个virtual修饰符,该修饰符表明:该基类的派生类可以重载该方法。DrawingObject类的Draw()方法完成如下事情:输出语句"I'mjustagenericdrawingobject."到控制台。2.清单9-2.带有重载方法的派生类:Line.cs,Circle.cs,andSquare.csusingSystem;publicclassLine:D

4、rawingObject{publicoverridevoidDraw(){Console.WriteLine("I'maLine.");}}publicclassCircle:DrawingObject{publicoverridevoidDraw(){Console.WriteLine("I'maCircle.");}}publicclassSquare:DrawingObject{publicoverridevoidDraw(){Console.WriteLine("I'maSquare.");}}说明清单9-2定义了

5、三个类。这三个类都派生自DrawingObject类。每个类都有一个同名Draw()方法,这些Draw()方法中的每一个都有一个重载修饰符。重载修饰符可让该方法在运行时重载其基类的虚方法,实现这个功能的条件是:通过基类类型的指针变量来引用该类。3.清单9-3.实现多态性的程序:DrawDemo.csusingSystem;publicclassDrawDemo{publicstaticintMain(string[]args){DrawingObject[]dObj=newDrawingObject[4];dObj[0]=n

6、ewLine();dObj[1]=newCircle();dObj[2]=newSquare();dObj[3]=newDrawingObject();foreach(DrawingObjectdrawObjindObj){drawObj.Draw();}return0;}}说明清单9-3演示了多态性的实现,该程序使用了在清单9-1和清单9-2中定义的类。在DrawDemo类中的Main()方法中,创建了一个数组,数组元素是DrawingObject类的对象。该数组名为dObj,是由四个DrawingObject类型的对象组

7、成。接下来,初始化dObj数组,由于Line,Circle和Square类都是DrawingObject类的派生类,所以这些类可以作为dObj数组元素的类型。如果C#没有这种功能,你得为每个类创建一个数组。继承的性质可以让派生对象当作基类成员一样用,这样就节省了编程工作量。一旦数组初始化之后,接着是执行foreach循环,寻找数组中的每个元素。在每次循环中,dObj数组的每个元素(对象)调用其Draw()方法。多态性体现在:在运行时,各自调用每个对象的Draw()方法。尽管dObj数组中的引用对象类型是DrawingObje

8、ct,这并不影响派生类重载DrawingObject类的虚方法Draw()。在dObj数组中,通过指向DrawingObject基类的指针来调用派生类中的重载的Draw()方法。输出结果是:I'maLine.I'maCircle.I'maSquare.I'mjustagenericdraw

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。