WEB开发网
开发学院软件开发C语言 C#多态性的概念及其应用 阅读

C#多态性的概念及其应用

 2010-09-30 20:51:07 来源:WEB开发网   
核心提示: 2.清单9-2. 带有重载方法的派生类:Line.cs, Circle.cs, and Square.csusingSystem;publicclassLine:DrawingObject{publicoverridevoidDraw(){Console.WriteLine("I

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()方法中的每一个都有一个重载修饰符。重载修饰符可让该方法在运行时重载其基类的虚方法,实现这个功能的条件是:通过基类类型的指针变量来引用该类。

3.清单9-3. 实现C# 多态性的程序: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;  
    }  
} 

说明

清单9-3演示了多态性的实现,该程序使用了在清单 9-1 和清单9-2中定义的类。在DrawDemo类中的Main()方法中,创建了一个数组, 数组元素是DrawingObject 类的对象。该数组名为dObj,是由四个DrawingObject类型的对象组成。

接下来, 初始化dObj数组, 由于Line, Circle和Square类都是DrawingObject类的派生类,所以这些类可以作为dObj数组元素的类型。 如果C#没有这种功能,你得为每个类创建一个数组。继承的性质可以让派生对象当作基类成员一样用,这样就节省了编程工作量。

一旦数组初始化之后,接着是执行foreach循环,寻找数组中的每个元素。在每次循环中, dObj 数组的每个元素(对象)调用其Draw()方法。多态性体现在:在运行时,各自调用每个对象的Draw()方法。尽管dObj 数组中的引用对象类型是DrawingObject,这并不影响派生类重载DrawingObject 类的虚方法Draw()。 在dObj 数组中,通过指向DrawingObject 基类的指针来调用派生类中的重载的Draw()方法。

输出结果是:

I'm a Line.

I'm a Circle.

I'm a Square.

I'm just a generic drawing object.

在DrawDemo 程序中,调用了每个派生类的重载的Draw()方法。 最后一行中,执行的是DrawingObject类的虚方法Draw()。这是因为运行到最后,数组的第四个元素是DrawingObject类的对象。

小结

现在对多态性有所了解之后,你可以在派生类中,实现一个重载基类虚方法的方法。虚方法和重载的派生类方法之间的关系就体现出C#多态性。

上一页  1 2 

Tags:多态性 概念 及其

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接