本节课将介绍C#的多态性,其目的包括:
1.了解什么是多态性
2.如何定义一个虚方法
3.如何重载一个虚方法
4.如何在程序中运用多态性
面向对象程序设计中的另外一个重要概念是多态性。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。 可以把一组对象放到一个数组中,然后调用它们的方法,在这种场合下,多态性作用就体现出来了,这些对象不必是相同类型的对象。当然,如果它们都继承自某个类,你可以把这些派生类,都放到一个数组中。 如果这些对象都有同名方法,就可以调用每个对象的同名方法。本节课将向你介绍如何完成这些事情。
1.清单9-1. 带有虚方法的基类:DrawingObject.cs |
using System; public class DrawingObject { public virtual void Draw() { Console.WriteLine("I\'m just a generic drawing object."); } } |
说明 |
清单9-1 定义了DrawingObject类。这是个可以让其他对象继承的基类。该类有一个名为Draw()的方法。Draw()方法带有一个virtual修饰符,该修饰符表明:该基类的派生类可以重载该方法。DrawingObject类的 Draw()方法完成如下事情:输出语句"I\'m just a generic drawing object."到控制台。
2.清单9-2. 带有重载方法的派生类:Line.cs, Circle.cs, and Square.cs |
using System; public class Line : DrawingObject { public override void Draw() { Console.WriteLine("I\'m a Line."); } } public class Circle : DrawingObject { public override void Draw() { Console.WriteLine("I\'m a Circle."); } } public class Square : DrawingObject { public override void Draw() { Console.WriteLine("I\'m a Square."); } } |
说明 |
3.清单9-3. 实现多态性的程序:DrawDemo.cs |
using System; public class DrawDemo { public static int Main(string[] args) { DrawingObject[] dObj = new DrawingObject[4]; dObj[0] = new Line(); dObj[1] = new Circle(); dObj[2] = new Square(); dObj[3] = new DrawingObject(); foreach (DrawingObject drawObj in dObj) { drawObj.Draw(); } return 0; } } |
说明 |
I\'m a Line. I\'m a Circle. I\'m a Square. I\'m just a generic drawing object. |
小结
现在对多态性有所了解之后,你可以在派生类中,实现一个重载基类虚方法的方法。虚方法和重载的派生类方法之间的关系就体现出C#的多态性。