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

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日

相关文章

  • Android开发中的简单设置技巧集锦

    Android开发中的简单设置技巧集锦 在Android开发中,设置是一个重要的环节,它可以帮助我们优化用户体验并提供更多的个性化选项。本攻略将介绍一些简单的设置技巧,帮助您更好地进行Android应用程序开发。 1. 使用PreferenceFragment进行设置 PreferenceFragment是Android提供的一个用于创建设置界面的类。它可以…

    other 2023年8月3日
    00
  • win7系统计算机图标右键菜单管理打不开解决方法

    当用户在Windows 7系统中右键点击桌面或者计算机图标时,会弹出一个菜单选项,但是如果用户在这里遇到任何问题,比如点击打开管理选项却无反应,这时候说明计算机图标右键菜单管理打不开了。这个问题可能是由Windows注册表损坏或者丢失导致的。下面我们来详细讲解如何解决这个问题。 解决win7系统计算机图标右键菜单管理打不开的方法 方法一:在注册表中修改 第一…

    other 2023年6月27日
    00
  • jquery实现右键菜单插件

    下面是jQuery实现右键菜单插件的完整攻略: 1. 介绍 右键菜单是一个常见的Web功能,它让用户能够在页面上右键单击以打开菜单,从而执行不同的操作。在jQuery中,我们可以实现一个自定义的右键菜单插件,以方便添加右键菜单的功能。 2. 步骤 以下是实现jQuery右键菜单插件的步骤: 2.1 准备工作 在实现插件之前,我们需要先确定菜单的样式和内容。这…

    other 2023年6月27日
    00
  • linux系统的初始化配置浅析

    Linux系统的初始化配置浅析 简介 Linux作为一种被广泛应用的操作系统,其初始化配置也就显得尤为重要。一个完整的配置流程可以让Linux系统运转更加稳定,同时也可以提高其安全性。本文将对Linux系统的初始化配置做一个浅析,主要包括以下内容: SSH配置 防火墙配置 SELinux配置 SSH配置 生成SSH密钥 SSH密钥用于在远程登录时进行身份认证…

    other 2023年6月20日
    00
  • C++11新特性std::make_tuple的使用

    C++11引入了许多新的语言特性和标准库,其中一个非常有用的新特性是std::make_tuple。本篇攻略将详细介绍std::make_tuple的使用方法,以及它可以如何帮助我们编写更加清晰而且易维护的代码。 什么是std::make_tuple? std::make_tuple是一个模板函数,它接受任意数量的参数,并将它们打包成一个std::tuple…

    other 2023年6月26日
    00
  • jquery 可拖拽的窗体控件实现代码

    首先,我们需要明白,jquery 是一个 JavaScript 库,它提供了方便的 DOM 操作封装,特别是对于 HTML 文档的遍历和操作、事件的处理、动画和 Ajax 前端数据交互等方面。因此,如果我们想要实现可拖拽的窗体控件,使用 jQuery 会让我们轻松地完成这个需求。 下面是代码的具体实现过程: 实现可拖拽的 div 元素 HTML 代码 &lt…

    other 2023年6月27日
    00
  • 深入phpMyAdmin的安装与配置的详细步骤

    深入 phpMyAdmin 的安装和配置需要遵循以下步骤: 步骤 1:下载和安装 phpMyAdmin 首先下载 phpMyAdmin 的最新版本,可以从官方网站上下载:https://www.phpmyadmin.net/downloads/ 解压下载好的文件并将其放置在您的 web 服务器目录中。例如,如果您将它放在 /var/www/html 目录下,…

    other 2023年6月27日
    00
  • 使用C语言递归与非递归实现字符串反转函数char *reverse(char *str)的方法

    使用C语言可以通过递归和非递归两种方法实现字符串反转函数char reverse(char str)。 递归方法实现字符串反转函数 递归是一种自我调用的算法,对于字符串反转函数,可以先将字符串前后两个字符交换,然后将剩下的子串再次递归调用,直至字符串为空或者只有一个字符时结束递归。以下是递归实现字符串反转函数的代码(注:需要注意字符串最后一个字符是结束符\0…

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