C#多态性的概念及其应用

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

1.了解什么是C#多态性

2.如何定义一个虚方法

3.如何重载一个虚方法

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

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

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()方法 中的每一个都有一个重载修饰符。重载修饰符可让该方法在运行时重载其基类的 虚方法,实现这个功能的条件是:通过基类类型的指针变量来引用该类。

时间: 2024-11-09 14:17:52

C#多态性的概念及其应用的相关文章

C++语言基础 例程 多态性的概念

贺老师的教学链接  本课讲解 一种死板的机制 #include <iostream> #include <string> using namespace std; //声明基类Student class Student { public: Student(int, string,float);//声明构造函数 void display( ); //声明输出函数 protected: //受保护成员,派生类可以访问 int num; string name; float score;

PHP 5.0中多态性的实现方案浅析

    提要:本文将讨论多态性的概念及其在面向对象设计中的应用,还将分析如何在PHP 5中使用多态性以及存在的优缺点. PHP的最新发行版本中已经实现了对迟绑定的支持.当然,在使用其迟绑定功能时还存在很多问题.如果你使用的是更旧版本的PHP(我的服务器上运行的是PHP 5.0.1版本),那么你可能发现其中缺乏对于迟绑定的支持.因此,请注意本文中的代码有可能无法工作在你特定的PHP 5版本中. 一. PHP 5和多态性 本文想讨论面向对象编程中最为重要的部分之一--多态性的设计.为了说明问题,我使

编程设计:PHP 5中多态性的实现方案浅析

作者:朱先忠编译 提要:本文将讨论多态性的概念及其在面向对象设计中的应用,还将分析如何在PHP 5中使用多态性以及存在的优缺点. PHP的最新发行版本中已经实现了对迟绑定的支持.当然,在使用其迟绑定功能时还存在很多问题.如果你使用的是更旧版本的PHP(我的服务器上运行的是PHP 5.0.1版本),那么你可能发现其中缺乏对于迟绑定的支持.因此,请注意本文中的代码有可能无法工作在你特定的PHP 5版本中. 一. PHP 5和多态性 本文想讨论面向对象编程中最为重要的部分之一--多态性的设计.为了说明

JavaScript面向对象技术实现树形控件

javascript|对象|控件 树形控件是一种人们熟悉的用户界面控件,广泛地用来显示层次型数据. 树形控件具有独特的扩展和折叠分支的能力,能够以较小的空间显示出大量的信息,一目了然地传达出数据之间的层次关系.凡是熟悉图形用户界面的用户,都能够自如地运用树形控件. 图一:用JavaScript实现的树形控件 HTML本身不支持树形控件,但我们可以通过一些JavaScript脚本代码实现.为了提高控件的可重用性,我们要充分运用JavaScript对面向对象编程技术的支持.本文的树形控件适用于IE

教你如何使用JSP面向对象web编程技术实现树形控件

js|web|编程|对象|控件 树形控件是一种人们熟悉的用户界面控件,广泛地用来显示层次型数据. 树形控件具有独特的扩展和折叠分支的能力,能够以较小的空间显示出大量的信息,一目了然地传达出数据之间的层次关系.凡是熟悉图形用户界面的用户,都能够自如地运用树形控件. 图一:用java script实现的树形控件 HTML本身不支持树形控件,但我们可以通过一些java script脚本代码实现.为了提高控件的可重用性,我们要充分运用java script对面向对象编程技术的支持.本文的树形控件适用于I

《UML面向对象设计基础》—第1章1.10节本章小结

1.10 本章小结 UML面向对象设计基础 因为"面向对象"在英语中就没有绝对优势的定义,因此,针对面向对象定义的特性从来就没有一致的意见.我本人认为以下特性对面向对象是至关重要的:封装.信息/实现隐藏.状态保持.对象标识.消息.类.继承.多态性及一般性. 面向对象的封装产生一个由表示对象状态的属性及其操作组成的软件结构("对象"),用实现的术语讲,就是操作的方法处理保持对象状态的变量.封装确保对对象内部信息的任何修改(或访问)都必须通过对象的操作. 信息/实现隐藏

将应用程序中的商业逻辑同对其提供支持的通用服务进行分离(转)

AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入封装.继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合.当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力.也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系.例如日志功能.日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系.对于其

110_《Delphi4编程技术内幕》

<Delphi4编程技术内幕> Delphi 教程 系列书籍 (110) <Delphi4编程技术内幕> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: 下载 原书名:Charlie Calvert's Delphi 4 Unleashed 作者: Charlie Calvert 译者: 潇湘工作室 丛书名: 软件开发技术丛书 出版社:机械工业出版社 ISBN:7111072162 上架时间:2000-7-1 出版日期:1999 年6月 页码:986 版次

依赖注入(DI)有助于应用对象之间的解耦,而面向切面编程(AOP)有助于横切关注点与所影响的对象之间的解耦(转good)

依赖注入(DI)有助于应用对象之间的解耦,而面向切面编程(AOP)有助于横切关注点与所影响的对象之间的解耦.所谓横切关注点,即影响应用多处的功能,这些功能各个应用模块都需要,但又不是其主要关注点,常见的横切关注点有日志.事务和安全等. 将横切关注点抽离形成独立的类,即形成了切面.切面主要由切点和通知构成,通知定义了切面是什么,以及何时执行何种操作:切点定义了在何处执行通知定义的操作. http://ju.outofmemory.cn/entry/216839 引子: AOP(面向方面编程:Asp