精品专题(2021-2022年收藏)C#多态实例详解.docx
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
C#多态实例详解 多态是面向对象编程中三大机制之一,其原理建立在"从父类继承而来的子类可以转换为其父类"这个规则之上,换句话说,能用父类的地方,就能用该类的子类。当从父类派生了很多子类时,由于每个子类都有其不同的代码实现,所以当用父类来引用这些子类时,同样的操作而可以表现出不同的操作结果,这就是所谓的多态。 了解什么是多态性 ---------------- 多态性是面向对象程序设计中的一个重要概念。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。可以把一组对象放到一个数组中,然后调用它们的方法,在这种场合下,多态性作用就体现出来了,这些对象不必是相同类型的对象。当然,如果它们都继承自某个类,你可以把这些派生类,都放到一个数组中。如果这些对象都有同名方法,就可以调用每个对象的同名方法。 定义一个虚方法 ---------------- 在C#中,使用virtual关键字来定义一个虚方法。虚方法是可以被派生类重载的方法。在派生类中,可以使用override关键字来重载基类的虚方法。 清单 9-1. 带有虚方法的基类:DrawingObject.cs ```csharp 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."到控制台。 定义一个派生类 ---------------- 在C#中,可以使用冒号(:)来继承基类。例如: ```csharp public class Line : DrawingObject { public override void Draw() { Console.WriteLine("I'm a Line."); } } ``` 说明:清单 9-2 定义了三个类。这三个类都派生自 DrawingObject 类。每个类都有一个同名Draw()方法,这些 Draw()方法中的每一个都有一个重载修饰符。重载修饰符可让该方法在运行时重载其基类的虚方法,实现这个功能的条件是:通过基类类型的指针变量来引用该类。 实现多态性 ---------------- 清单 9-3. 实现多态性的程序:DrawDemo.cs ```csharp 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,这并不影响派生类重载,
- 粉丝: 2
- 资源: 48万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助