C#中overrid和new修饰符有什么不同

yizhihongxing

C#中的overrid和new修饰符都与方法的继承、覆盖相关。它们之间的区别在于,使用overrid修饰符时,子类将重写从基类中继承的方法,而使用new修饰符时,子类将创建一个新的方法,覆盖了基类中的同名方法。

下面通过两个示例来说明这两个修饰符的不同之处:

示例一:using override

class Animal{
    public virtual void Eat(){
        Console.WriteLine("Animal Eat");
    }
}

class Dog : Animal{
    public override void Eat(){
        Console.WriteLine("Dog Eat");
    }
}

class Program{
    static void Main(string[] args){
        Animal ani = new Dog();
        ani.Eat();    // "Dog Eat"
    }
}

在这个示例中,我们定义了Animal类和Dog类。Animal类中有一个虚方法Eat(),在Dog类中我们使用override修饰符重写了该方法。在Main方法中,我们创建了一个Dog对象,并将其强制转换成Animal类型的对象。当调用Animal对象的Eat()方法时,实际上调用的是Dog类中的重写方法。因此,控制台输出的是"Dog Eat"。

示例二:using new

class Apple{
    public void Dispose(){
        Console.WriteLine("Apple disposed");
    }
}

class RedApple : Apple{
    new public void Dispose(){
        Console.WriteLine("RedApple disposed");
    }
}

class Program{
    static void Main(string[] args){
       Apple app = new RedApple();
       app.Dispose();     // "Apple disposed"
       RedApple rApp = new RedApple();
       rApp.Dispose();    // "RedApple disposed"
    }
}

在这个示例中,我们定义了Apple类和RedApple类。Apple类中有一个虚方法Dispose()。在RedApple类中,我们使用new修饰符创建了一个新的Dispose()方法。在Main方法中,我们创建了一个RedApple对象,并将其强制转换成Apple类型的对象。当调用Apple对象的Dispose()方法时,实际上调用的是基类中的Dispose()方法。控制台输出的是"Apple disposed"。而当我们直接调用RedApple对象的Dispose()方法时,实际上调用的是子类中的Dispose()方法,所以控制台输出的是"RedApple disposed"。

因此,overrid修饰符表示子类将重写基类的方法,并提供新的实现。而new修饰符表示子类将覆盖基类方法并提供自己的实现。这两个修饰符的区别在于它们对于派生类的基类方法的处理方式不同。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中overrid和new修饰符有什么不同 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 有关Server.Mappath详细接触

    下面是关于Server.MapPath的详细讲解: 什么是Server.MapPath Server.MapPath是一个ASP.NET中的常用方法,可以在服务器上定位一个虚拟路径对应的物理路径。虚拟路径指的是相对于当前网站根目录的路径,而物理路径指的是当前网站文件夹在服务器上的真实路径。 如何使用Server.MapPath 要使用Server.MapPa…

    other 2023年6月27日
    00
  • 显示设置-屏幕分辨率-无法从远程会话更改

    以下是关于“显示设置-屏幕分辨率-无法从远程会话更改”的完整攻略,包括基本概念、解决、示例说明和注意事项。 基本概念 “显示设置-屏幕分辨率-无法从远程会话更改”是指在远程桌面连接到Windows操作系统时,无法更改屏幕分辨率的问题。这个问题通常出现在使用远程桌面连接到Windows Server操作系统时,因为Windows Server默认情况下不允许更…

    other 2023年5月7日
    00
  • React生命周期函数图解介绍

    下面是详细讲解 “React生命周期函数图解介绍”的完整攻略及示例说明。 1. React生命周期概述 React组件的生命周期是指组件从创建到卸载的整个过程中所经历的一系列阶段,每个阶段都具有相应的生命周期函数,这些生命周期函数可以被称为钩子函数。 React 生命周期分为三大部分 1.1 组件挂载阶段(Mounting) 组件实例被创建并插入 DOM 中…

    other 2023年6月27日
    00
  • 使用poi统计工作职责

    POI是一个用于读写Microsoft Office格式文件的Java库,包括Excel、Word和PowerPoint等文件格式。在本文中我们将介绍如何使用POI统计工作责,包括读取Excel文件、解析Excel数据、统计工作职责等。 步骤1:读取Excel文件 首先,我们需要取Excel文件中的数据。可以通过以下步骤实现: 创建一个File对象,指定要读…

    other 2023年5月8日
    00
  • apache安装与配置

    Apache安装与配置 安装Apache 在Linux上安装 在Linux系统中,可以使用包管理器来安装Apache。以基于Debian的系统为例,可以执行以下命令来安装Apache: sudo apt-get update sudo apt-get install apache2 在Windows上安装 在Windows系统中,可以直接从Apache官网下…

    其他 2023年3月29日
    00
  • Pycharm的项目文件名是红色的原因及解决办法

    PyCharm中项目文件名变成红色的原因是因为该文件或文件夹已被标记为“未追踪”或“未添加到版本控制系统”。这通常发生在新创建的项目或在使用版本控制系统时。在本文中,我们将提供两种解决方法来解决这个问题。 方法一:将文件添加到版本控制系统 如果您使用版本控制系统(如Git)来管理项目,可以将文件或文件夹添加到版本控制系统中,以解决文件名变成红色的问题。以下是…

    other 2023年5月5日
    00
  • VA One 2018怎么激活?ESI VAOne 2018完美安装授权教程(附下载)

    VA One 2018激活攻略 1. 下载软件及补丁 首先,从官网或第三方软件下载网站下载VA One 2018的安装文件及破解补丁。建议在下载时选择合法、可靠的渠道,避免下载安装来源不明的恶意软件。 2. 安装软件 接下来,运行VA One 2018的安装程序,根据程序提示进行安装。需要注意的是,安装路径一定要选择一个非系统盘的目录,否则程序可能会出现启动…

    other 2023年6月27日
    00
  • iOS10.2正式版固件下载 iOS10.2正式版官方固件下载地址大全

    iOS 10.2正式版固件下载攻略 iOS 10.2正式版固件是苹果公司发布的最新版本,它带来了一些新功能和改进。如果你想下载iOS 10.2正式版固件,下面是一个详细的攻略,包含了下载地址和示例说明。 步骤一:备份设备 在开始下载iOS 10.2正式版固件之前,建议你先备份你的设备。这样可以确保你的数据在升级过程中不会丢失。你可以通过iTunes或iClo…

    other 2023年8月4日
    00
合作推广
合作推广
分享本页
返回顶部