多态是面向对象编程中三大机制之一,其原理建立在"从父类继承而来的 子类可以转换为其父类"这个规则之上,换句话说,能用父类的地方,就能用 该类的子类.当从父类派生了很多子类时,由于每个子类都有其不同的代码实现, 所以当用父类来引用这些子类时,同样的操作而可以表现出不同的操作结果,这就 是所谓的多态.
1.了解什么是C#多态性
2.如何定义一个虚方法
3.如何重载一个虚方法
4.如何在程序中运用多态性
面向 对象程序设计中的另外一个重要概念是C#多态性。在运行时,可以通过指向基类 的指针,来调用实现派生类中的方法。 可以把一组对象放到一个数组中,然后 调用它们的方法,在这种场合下,多态性作用就体现出来了,这些对象不必是相 同类型的对象。当然,如果它们都继承自某个类,你可以把这些派生类,都放到 一个数组中。 如果这些对象都有同名方法,就可以调用每个对象的同名方法。 本节课将向你介绍如何完成这些事情。
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.");
}
}
说明
清单9-2定义了三个类。这三个类 都派生自DrawingObject类。每个类都有一个同名Draw()方法,这些Draw()方法 中的每一个都有一个重载修饰符。重载修饰符可让该方法在运行时重载其基类的 虚方法,实现这个功能的条件是:通过基类类型的指针变量来引用该类。