一、什么是多态?
面向对象程序设计中的一个重要概念是多态性!同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。多态性往往通过派生类重载基类中的虚函数型方法来实现。
在C#中,多态性的定义是:同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。
二、实现多态
在C#中实现多态时,有两种实现方式:1.我们在子类中使用override关键字重写基类中用virtual关键字修饰的虚拟的基成员;2.可以在子类中使用new关键字让派生成员替换基成员,此时基类成员只是被有意的隐藏掉了。
示例1(第一种实现方式virtual和override):
定义一个一般类:Graph,其中定义了2个虚方法(用virtual关键字定义)CalcArea和GetName。定义了两个字类:Rectangle(长方形)和Square(正方形),都重写了Graph中的这两个虚方法(用override关键字)。
public class Graph { public virtual decimal CalcArea() { return 100; } public virtual string GetName() { return "Graph"; } } public class Rectangle : Graph { decimal _width; decimal _height; public Rectangle(decimal w, decimal h) { this._height = h; this._width = w; } public override decimal CalcArea() { return this._height * this._width; } public override string GetName() { return "Rectangle"; } } public class Square : Graph { decimal _h; public Square(decimal h) { this._h = h; } public override decimal CalcArea() { return _h * _h; } public override string GetName() { return "Square"; } }在一个页面中,代码如下:
protected void Page_Load( object sender, EventArgs e) { Graph[] graphs = new Graph[2]; graphs[0] = new Rectangle(12,12); graphs[1] = new Square(15); foreach (Graph graph in graphs) { Response.Write(graph.GetName() + "---" + graph.CalcArea().ToString()+"<BR>"); } }示例2:第二种实现方式(new)简单说明一下。
class FatherClass { public void Method(){} } class SonClass:FatherClass { public new void Method() { 。。。。 base.Method(); } }转载于:https://www.cnblogs.com/lzm525/archive/2009/03/03/1402628.html
相关资源:数据结构—成绩单生成器