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

[转]深入剖析c#的多态

阅读更多

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

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。多态性通过派生类重载基类中的虚函数型方法来实现。

在面向对象的系统中,多态性是一个非常重要的概念,它允许客户对一个对象进行操作,由对象来完成一系列的动作,具体实现哪个动作、如何实现由系统负责解释。

“多态性”一词最早用于生物学,指同一种族的生物体具有相同的特性。在C#中,多态性的定义是:同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。C#支持两种类型的多态性:

● 编译时的多态性

编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

● 运行时的多态性

运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态性通过虚成员实现。

编译时的多态性为我们提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。

二、实现多态

多态性是类为方法(这些方法以相同的名称调用)提供不同实现方式的能力。多态性允许对类的某个方法进行调用而无需考虑该方法所提供的特定实现。例如,可能有名为 Road 的类,它调用另一个类的 Drive 方法。这另一个类 Car 可能是 SportsCar 或 SmallCar,但二者都提供 Drive 方法。虽然 Drive 方法的实现因类的不同而异,但 Road 类仍可以调用它,并且它提供的结果可由 Road 类使用和解释。

可以用不同的方式实现组件中的多态性:

● 接口多态性。

● 继承多态性。

● 通过抽象类实现的多态性。

接口多态性

多个类可实现相同的“接口”,而单个类可以实现一个或多个接口。接口本质上是类需要如何响应的定义。接口描述类需要实现的方法、属性和事件,以及每个成员需要接收和返回的参数类型,但将这些成员的特定实现留给实现类去完成。

组件编程中的一项强大技术是能够在一个对象上实现多个接口。每个接口由一小部分紧密联系的方法、属性和事件组成。通过实现接口,组件可以为要求该接口的任何其他组件提供功能,而无需考虑其中所包含的特定功能。这使后续组件的版本得以包含不同的功能而不会干扰核心功能。其他开发人员最常使用的组件功能自然是组件类本身的成员。然而,包含大量成员的组件使用起来可能比较困难。可以考虑将组件的某些功能分解出来,作为私下实现的单独接口。

根据接口来定义功能的另一个好处是,可以通过定义和实现附加接口增量地将功能添加到组件中。优点包括:

1.简化了设计过程,因为组件开始时可以很小,具有最小功能;之后,组件继续提供最小功能,同时不断插入其他的功能,并通过实际使用那些功能来确定合适的功能。

2.简化了兼容性的维护,因为组件的新版本可以在添加新接口的同时继续提供现有接口。客户端应用程序的后续版本可以利用这些接口的优点。

通过继承实现的多态性

多个类可以从单个基类“继承”。通过继承,类在基类所在的同一实现中接收基类的所有方法、属性和事件。这样,便可根据需要来实现附加成员,而且可以重写基成员以提供不同的实现。请注意,继承类也可以实现接口,这两种技术不是互斥的。

C# 通过继承提供多态性。对于小规模开发任务而言,这是一个功能强大的机制,但对于大规模系统,通常证明会存在问题。过分强调继承驱动的多态性一般会导致资源大规模地从编码转移到设计,这对于缩短总的开发时间没有任何帮助。

何时使用继承驱动的多态性呢?使用继承首先是为了向现有基类添加功能。若从经过完全调试的基类框架开始,则程序员的工作效率将大大提高,方法可以增量地添加到基类而不中断版本。当应用程序设计包含多个相关类,而对于某些通用函数,这些相关类必须共享同样的实现时,您也可能希望使用继承。重叠功能可以在基类中实现,应用程序中使用的类可以从该基类中派生。抽象类合并继承和实现的功能,这在需要二者之一的元素时可能很有用。

通过抽象类实现的多态性

抽象类同时提供继承和接口的元素。抽象类本身不能实例化,它必须被继承。该类的部分或全部成员可能未实现,该实现由继承类提供。已实现的成员仍可被重写,并且继承类仍可以实现附加接口或其他功能。

抽象类提供继承和接口实现的功能。抽象类不能示例化,必须在继承类中实现。它可以包含已实现的方法和属性,但也可以包含未实现的过程,这些未实现过程必须在继承类中实现。这使您得以在类的某些方法中提供不变级功能,同时为其他过程保持灵活性选项打开。抽象类的另一个好处是:当要求组件的新版本时,可根据需要将附加方法添加到基类,但接口必须保持不变。

何时使用抽象类呢?当需要一组相关组件来包含一组具有相同功能的方法,但同时要求在其他方法实现中具有灵活性时,可以使用抽象类。当预料可能出现版本问题时,抽象类也具有价值,因为基类比较灵活并易于被修改。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2130004

分享到:
评论

相关推荐

    深入剖析C#的多态××××××

    深入剖析C#的多态性,我们首先要理解多态性的本质。多态性是面向对象编程的核心特性之一,它允许程序处理多种不同类型的对象,但使用相同的接口或方法调用。这种特性使得代码更加灵活,提高了代码的复用性和可扩展性...

    深入剖析C#继承机制

    【深入剖析C#继承机制】 C#是一种完全面向对象的编程语言,它提供了一种强大的工具——继承性,以支持代码复用和软件的可扩展性。继承是面向对象编程的重要概念,允许一个类(派生类)从另一个类(基类)获取属性和...

    深入剖析C#继承制资料

    本文将深入探讨C#中的继承制,包括基础知识、规则、访问控制以及多态性,帮助读者理解如何有效地利用继承提高代码的复用性和可扩展性。 一、继承基础知识 继承允许一个类(称为派生类或子类)从另一个类(称为基类...

    深入剖析C#语言面向对象编程中的泛型机制及其应用场景

    通过类、对象、继承、多态、接口和抽象类的面向对象特性,配合泛型类、方法、类型参数、约束以及其编译时和运行时的实现原理,C#为开发者提供了一种高效且强大的编程手段,广泛适用于集合、算法、数据结构等应用场景...

    C#中CLR虚方法的多态调用

    通过深入剖析C#中的虚方法及其在CLR中的实现细节,我们了解到多态调用的本质在于运行时确定方法的真正实现。通过使用MethodTable和虚方法表(VTable),CLR能够在运行时动态决定调用哪个方法版本,从而支持C#语言的...

    深入理解c# 第三版 高清

    《深入理解C# 第三版》是一本专为C#编程者深度剖析语言特性和实践技巧的权威指南。这本书详细地介绍了C#的核心概念、语法以及高级特性,旨在帮助读者全面掌握C#编程,提升软件开发技能。在阅读这本书的过程中,你将...

    通过实例来剖析C#继承机制

    下面我们将通过一个实例深入剖析C#中的继承机制。 首先,让我们理解一下什么是继承。在C#中,我们可以使用`:`符号定义一个类作为另一个类的子类。例如: ```csharp public class ParentClass { public int ...

    完全剖析 C#(2001)

    《完全剖析 C#》是2001年出版的一本深度解析C#编程语言的专业书籍,对于想要深入了解C#的开发者来说,具有很高的参考价值。这本书可能是C#初版发布时的重要参考资料,对于理解早期版本的C#特性和规范极具帮助。 C#...

    C#软件项目开发全程剖析.rar

    《C#软件项目开发全程剖析》是一本针对C#编程语言和软件开发流程深度解析的教程,由清华大学出版社出版。本书旨在帮助读者从基础到高级,全面掌握C#语言在实际项目开发中的应用技巧和实践经验。 C#是微软公司推出的...

    C#软件项目开发全程剖析

    在"C#软件项目开发全程剖析"中,我们将深入探讨C#编程语言在实际软件项目中的应用,从项目的初期规划到最终的部署与维护。C#是一种面向对象的、类型安全的编程语言,由微软公司为.NET框架开发,广泛应用于Windows...

    c#深入详解 随书源码

    《C#深入详解》是一本深受开发者喜爱的技术书籍,它深入剖析了C#语言的核心概念、语法特性以及高级编程技术。随书源码是作者为了帮助读者更好地理解和实践书中理论而提供的实际代码示例,涵盖了各个章节的关键知识点...

    S2 7.0深入.NET平台和C#编程

    这本书详细介绍了.NET平台的各个方面,包括但不限于类库、运行时环境、垃圾回收机制,同时还深入剖析了C#语言的语法特性、面向对象编程、泛型、异步编程等关键概念。 首先,.NET平台是微软推出的一款开源、跨平台的...

    MSDN离线版C# 脚本手册 C# 指南.pdf

    - **泛型**:深入剖析泛型的概念及其在提高代码复用性和类型安全性方面的作用。 - **迭代器**:讨论迭代器模式及其在C#中的实现。 - **委托和事件**: - **委托简介**:介绍委托的基本概念和用途。 - **System....

    经典书籍《展现c#》

    《展现C#》是一本深度剖析C#编程语言的经典书籍,旨在帮助读者理解和掌握C#的核心概念和技术。这本书由rainbow翻译,通过简洁易懂的方式介绍了C#的特点和优势,适合初学者和有一定C/C++基础的程序员阅读。 C#(读作...

    c#中文专业论坛

    - **面向对象编程**:学会如何设计类、封装、继承和多态,这是C#中关键的编程理念。 - **框架与库的运用**:理解.NET Framework中的核心组件如System.Collections、System.IO等,以及ASP.NET MVC框架的工作原理。 - ...

Global site tag (gtag.js) - Google Analytics