`
isiqi
  • 浏览: 16485215 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

C# 多态

阅读更多

C# 多态

Posted on 2007-09-06 23:35 Ninety-Nine 阅读(23) 评论(0) 编辑 收藏 网摘 所属分类: C#相关 <!--<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"><rdf:Descriptionrdf:about="http://www.cnblogs.com/ninetynine/archive/2007/09/06/884998.html"dc:identifier="http://www.cnblogs.com/ninetynine/archive/2007/09/06/884998.html"dc:title="C# 多态"trackback:ping="http://www.cnblogs.com/ninetynine/services/trackbacks/884998.aspx" /></rdf:RDF>-->

多态是面向对象编程中三大机制之一,其原理建立在"从父类继承而来的子类可以转换为其父类"这个规则之上,换句话说,能用父类的地方,就能用该类的子类.当从父类派生了很多子类时,由于每个子类都有其不同的代码实现,所以当用父类来引用这些子类时,同样的操作而可以表现出不同的操作结果,这就是所谓的多态.

1.了解什么是多态性

2.如何定义一个虚方法

3.如何重载一个虚方法

4.如何在程序中运用多态性

面向对象程序设计中的另外一个重要概念是多态性。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。 可以把一组对象放到一个数组中,然后调用它们的方法,在这种场合下,多态性作用就体现出来了,这些对象不必是相同类型的对象。当然,如果它们都继承自某个类,你可以把这些派生类,都放到一个数组中。 如果这些对象都有同名方法,就可以调用每个对象的同名方法。本节课将向你介绍如何完成这些事情。

1.清单9-1. 带有虚方法的基类:DrawingObject.cs

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."到控制台。

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. 实现多态性的程序: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#的多态性。

分享到:
评论

相关推荐

    一个经典c#多态的范例

    在这个"经典C#多态的范例"中,我们可能看到一个基类(Base Class)定义了至少一个虚方法,然后由一个或多个派生类(Derived Classes)继承这个基类并重写了该虚方法。例如,基类可以定义一个名为`Talk()`的方法,...

    c#多态 完全 通 源码

    在这个"完全通源码"的压缩包中,我们可以期待看到关于C#多态的实例和源代码,帮助我们深入理解和运用这个概念。 1. **多态的定义**:多态意味着“多种形态”。在C#中,多态主要体现在方法的重载(Overloading)和...

    精品专题(2021-2022年收藏)C#多态实例详解.docx

    C#多态实例详解 多态是面向对象编程中三大机制之一,其原理建立在"从父类继承而来的子类可以转换为其父类"这个规则之上,换句话说,能用父类的地方,就能用该类的子类。当从父类派生了很多子类时,由于每个子类都有...

    C#多态测试C#多态测试C#多态测试

    在这个“C#多态测试”主题中,我们将深入探讨C#中的多态性,包括方法的重载、重写、抽象类和接口,以及虚方法和非虚方法的区别。 一、方法的重载(Overloading) 在C#中,方法的重载是指在同一个作用域内,可以有多...

    VS2010 C# 多态实例

    在这个“VS2010 C# 多态实例”中,我们将深入探讨C#语言如何实现多态,以及如何在Visual Studio 2010环境下利用这一特性进行开发。 C#中的多态性主要体现在两个方面:方法的重载(Overloading)和方法的重写...

    C#多态小案例代码分享~

    在C#编程语言中,多态(Polymorphism)是面向对象编程的三大特性之一,另外两个是封装和继承。多态性允许我们使用一个通用的接口来处理不同类型的对象,使得代码更具灵活性和可扩展性。在这个"多态"案例中,我们可以...

    C# 多态概念

    ### C#中的多态概念 在面向对象编程中,多态是一种重要的特性,它允许不同类的对象对同一消息做出响应,即实现不同的行为。在C#语言中,多态是通过多种方式实现的,包括继承、接口实现以及虚方法与抽象方法等。本文...

    C#多态.doc

    【C#多态】 C#中的多态性是面向对象编程的一个核心概念,它允许不同类型的对象对同一操作做出不同的响应。多态性分为编译时的多态性和运行时的多态性。 1. 编译时的多态性: 编译时的多态性是通过函数重载来实现...

    C#多态学习源码

    C#多态学习源码,vs2010编辑,直接添加或者拷贝源代码即可运行。C#中多态的理解参考博文:http://blog.csdn.net/zxcvbnm32123/article/details/9385931

    C# 多态演示例子

    C#多态演示例子 QQ:292258449

    C# 多态三种实现方式的

    C#多态三种实现方式

    C#多态示例讲解TXT

    详细讲解C#多态,完整概念+代码示例,亲自编写绝对正确,适合初学者,进阶人群谨慎下载!!!O(∩_∩)O哈哈~!!!

    C#多态详解课件一看就懂

    ### C#多态详解 #### 一、多态的基本概念 多态是面向对象编程语言中的一个重要特性,它使得程序能够更加灵活地处理各种不同类型的对象。简单来说,多态是指“同一操作作用于不同的对象,可以有不同的解释,产生...

    C# 多态教材 e.g 抽象类继承的武器场景示例

    C# 多态 抽象类继承的武器场景示例 接口实现的开火场景示例 虚方法的武器场景示例

    C#多态实现计算器有BUG,求解决!

    在你提到的问题中,“C#多态实现计算器有BUG,求解决!”很可能是指在设计和实现一个基于多态的计算器类层次结构时遇到了问题。下面,我们将深入探讨多态性在C#中的应用以及可能引发的常见问题,并给出相应的解决...

    C#多态技术及简单例子描述

    在C#中,多态性(Polymorphism)是面向对象编程的核心概念之一,它允许一个接口或基类引用调用不同的实现,从而提供更大的灵活性和代码重用。多态性分为编译时多态性和运行时多态性。 1. 编译时多态性: 编译时多态...

    C#面向对象编程-多态习题[整理].pdf

    C#面向对象编程-多态习题[整理].pdf

    c#多态,接口等概念和方法

    在C#编程语言中,多态性(Polymorphism)、接口(Interface)和线程(Thread)是核心的面向对象编程概念,对于初学者来说,理解并熟练掌握这些概念至关重要。下面将对这些主题进行详细阐述。 **多态性**...

    vs2005_winfrom_C#多态和抽象类

    ### C#中的多态与抽象类 在C#编程语言中,多态和抽象类是面向对象编程(OOP)的重要特性,它们为程序设计提供了灵活性和可扩展性。下面将详细探讨这两个概念,并通过一个具体的示例来展示它们的应用。 #### 1. ...

    对C# 多态的理解

    在C#中,多态主要通过三种方式实现:方法的重载(Overloading)、重写(Overriding)以及实现抽象类或接口中的方法。 首先,我们来看重载。重载是指在同一个作用域内,可以有多个同名方法,但这些方法的参数列表...

Global site tag (gtag.js) - Google Analytics