`

C#中的多态性

阅读更多

首先理解一下什么叫多态。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。

多态性通过派生类覆写基类中的虚函数型方法来实现。

 

多态性分为两种,一种是编译时的多态性,一种是运行时的多态性。

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

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

 

下面我们来分别说明一下多态中涉及到的四个概念:重载,覆写,虚方法和抽象方法。

重载和覆写的区别:

重载

类中定义的方法的不同版本

         public int Calculate(int x, int y)

         public double Calculate(double x, double y)

特点(两必须一可以)

         方法名必须相同

         参数列表必须不相同

         返回值类型可以不相同

覆写

         子类中为满足自己的需要来重复定义某个方法的不同实现。

         通过使用override关键字来实现覆写。

         只有虚方法和抽象方法才能被覆写。

         要求(三相同)

                   相同的方法名称

                   相同的参数列表

                   相同的返回值类型

最后再来介绍一下虚方法和抽象方法

虚方法:

声明使用virtual关键字。

调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。

虚方法可以有实现体。


抽象方法:

必须被派生类覆写的方法。

可以看成是没有实现体的虚方法。

如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法。


注意:

昨天突然发现c#,和c++俩种语言在多态性的 实现机制 上面的细微差别。
   
如果是C++,在基类的构造函数里面调用虚函数的话,会调用本类的不会调用派生类的,原因是基类构造的时候,虚表还没有被派生类继承和修改。

    但如果是C#,那就不同了,在基类的构造函数里面照样调用派生类的。不知道有谁知道c#它的这种底层机制是怎样的?
-------是这样的,C++会先初始化基类,然后逐级初始化派生类型。C#则是一开始就把对象创建好了,然后逐个调用构造函数。本质区别在于C++的构造函数的任务是初始化,C#则不然,C#的类型的任何字段不必初始化,均有默认值,所以C#在调用构造函数之前就已经将对象初始化完毕了。

通过继承,一个类可以用作多种类型:可以用作它自己的类型、任何基类型,或者在实现接口时用作任何接口类型。这称为多态性。C#中的每种类型都是多态的。类型可用作它们自己的类型或用作Object实例,因为任何类型都自动将Object当作基类型。  
   
  多态性不仅对派生类很重要,对基类也很重要。任何情况下,使用基类实际上都可能是在使用已强制转换为基类类型的派生类对象。基类的设计者可以预测到其基类中可能会在派生类中发生更改的方面。例如,表示汽车的基类可能包含这样的行为:当考虑的汽车为小型货车或敞篷汽车时,这些行为将会改变。基类可以将这些类成员标记为虚拟的,从而允许表示敞篷汽车和小型货车的派生类重写该行为。

 

 
分享到:
评论

相关推荐

    C#中多态性的实现

    多态是指一个行为具有多个不同表现形式的能力,在C#中通过多态性的检测时机可以分为静态多态性和动态多态性 静态多态性:函数重载和运算符重载 动态多态性:抽象方法、重写方法、隐藏方法 二:函数重载(overlode) ...

    深入解析C#的多态性

    在C#语言中,多态性是一种非常强大的特性,它允许程序员编写更加灵活和可扩展的代码。本文将深入探讨C#中的多态性,并通过具体的示例来帮助读者更好地理解和应用这一特性。 #### 1. 多态性的定义 多态性是指允许...

    C#多态性的介绍

    ### C#中的多态性详解 #### 一、多态性的概念 在C#中,多态性(Polymorphism)是一种重要的面向对象编程特性,它允许子类重写或扩展父类的方法,从而实现同一接口的不同实现方式。多态性意味着一个接口可以具有...

    C#多态性实验报告详细讲解

    **C#多态性实验报告详细讲解** C#是一种面向对象的编程语言,其中多态性是其核心特性之一。本实验报告旨在深入理解和实践C#中的多态性,通过设计一个银行卡类(BankCard)及其派生类(ForeignCard,LimitedCard),...

    深入浅析c#静态多态性与动态多态性

    在静态多态性中,函数的响应是在编译时发生的。 函数重载是静态多态性的一个重要实现方式。函数重载允许在同一个范围内对相同的函数名有多个定义。函数的定义必须彼此不同,可以是参数列表中的参数类型不同,也可以...

    c#中类的多态性的例子

    描述虚函数与飞虚函数的区别,以及多态的使用

    C#多态性.doc_入门教程

    C#中的多态性是面向对象编程的核心特性之一,它允许一个类的对象可以被视为它的基类类型或实现的接口类型。这种能力使得代码更加灵活,能够处理不同类型的对象,而无需知道具体的类型细节。在C#中,每种类型都具有多...

    C#多态性实例,向基类构造函数传递参数.rar

    综上所述,这个"C#多态性实例,向基类构造函数传递参数"的示例展示了如何在C#中利用多态性、继承和构造函数来创建灵活、可扩展的代码结构。通过理解和应用这些概念,开发者可以编写出更高效、更具维护性的软件系统。

    C#多态性实例,向基类构造函数传递参数

    在C#编程语言中,多态性(Polymorphism)是面向对象编程的三大特性之一,其他两个是封装和继承。多态性允许我们使用一个通用的接口来处理不同的对象,使得代码更具可读性和可扩展性。在这个实例中,我们将深入探讨...

    C#应用程序开发-多态性.pptx

    在C#应用程序开发中,多态性是一项核心概念,它允许不同的对象对同一行为做出不同的响应,从而展现出不同的行为特征。多态性是面向对象编程的三大特性之一,另外两个是封装和继承。多态性使得代码更具通用性和可扩展...

    C#类的多态性详解

    第一种:编译时的多态性,直接这样说不知道说啥?程序执行过程主要分为三步:编译,链接,运行。...C#运行时的多态性通过虚方法实现。在类方法声明加上了virtual修饰符,称为虚方法,反之为非虚方法

    关于多态性的经典例子

    在C#编程语言中,多态性(Polymorphism)是一项核心特性,它允许我们使用一个接口或基类引用不同的派生类型。多态性在面向对象编程中扮演着至关重要的角色,因为它提供了代码的灵活性、可重用性和扩展性。下面我们将...

    多态性和继承(所有关于抽象类在C#中)

    在这一系列“跳水在面向对象编程”的这篇...抽象类起到多态性和继承一个不同的和非常有趣的角色。我们将讨论抽象类与我们的动手实验和理论作为解释什么输出我们得到的所有方面。我们也将列出下来点,记得在文章的结尾。

    C#教学课件:继承与多态性.ppt

    C#教学课件:继承与多态性.ppt

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

    在C#中,多态性分为两种类型:编译时的多态性和运行时的多态性。编译时的多态性主要通过方法重载实现,即在同一作用域内,用相同的名称但参数列表不同的方法。编译器根据传入的参数类型和数量自动选择正确的方法执行...

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

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

    第5章继承性、多态性和命名空间

    在C#中,面向对象的编程涉及几个核心概念,其中包括继承性、多态性和命名空间。这些特性使得代码更加灵活,易于维护,同时增强了模块的复用性。 **1. 继承机制** 继承是面向对象编程的一个关键特性,它允许一个类...

Global site tag (gtag.js) - Google Analytics