C#中的多态性

it2022-05-09  36

一、什么是多态?

   面向对象程序设计中的一个重要概念是多态性!同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。多态性往往通过派生类重载基类中的虚函数型方法来实现。

  在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

相关资源:数据结构—成绩单生成器

最新回复(0)