- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
----C#多态实例详解----
多态是面向对象编程中三大机制之一,其原理建立在从父类继承而来的子类可以转换为其
父类这个规则之上,换句话说,能用父类的地方,就能用该类的子类.当从父类派生了很多子
类时,由于每个子类都有其不同的代码实现,所以当用父类来引用这些子类时,同样的操作而 可以表现出不同的操作结果,这就是所谓的多态.
了解什么是多态性
如何定义一个虚方法
如何重载一个虚方法
如何在程序中运用多态性
面向对象程序设计中的另外一个重要概念是多态性。在运行时,可以通过指向基类的指针,
来调用实现派生类中的方法。可以把一组对象放到一个数组中,然后调用它们的方法,在
这种场合下,多态性作用就体现出来了,这些对象不必是相同类型的对象。当然,如果它
们都继承自某个类,你可以把这些派生类,都放到一个数组中。如果这些对象都有同名方 法,就可以调用每个对象的同名方法。本节课将向你介绍如何完成这些事情。
1.清单 9-1. 带有虚方法的基类:DrawingObject.cs
using System;
public class DrawingObject
{
public virtual void Draw()
{
Console.WriteLine(Im just a generic drawing object.);
}
}
说明
清单 9-1 定义了 DrawingObject 类。这是个可以让其他对象继承的基类。该类有一个名为
Draw()的方法。Draw()方法带有一个 virtual 修饰符,该修饰符表明:该基类的派生类可
以重载该方法。DrawingObject 类的 Draw()方法完成如下事情:输出语句Im 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(Im a Line.);
}
}
public class Circle : DrawingObject
{
public override void Draw()
{
Console.WriteLine(Im a Circle.);
}
}
public class Square : DrawingObject
{
public override void Draw()
{
Console.WriteLine(Im a Square.);
}
}
说明
清单 9-2 定义了三个类。这三个类都派生自 DrawingObject 类。每个类都有一个同名
Draw()方法,这些 Draw()方法中的每一个都有一个重载修饰符。重载修饰符可让该方法在
运行时重载其基类的虚方法,实现这个功能的条件是:通过基类类型的指针变量来引用该 类。
3.清单 9-3. 实现多态性的程序: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()方法。多态性体现在:在运行时,各自调用
每个
原创力文档


文档评论(0)