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日

相关文章

  • dockernginx重启命令

    简介 在使用Docker部署Nginx时,我们可能需要重启Nginx服务。在本攻略中,我们将介绍如何使用Docker命令重启Nginx服务,并提供两个示例说明。 步骤 以下是使用Docker命令重启Nginx服务的步骤。 步骤1:查看Nginx容器ID 首先,我们需要查看Nginx容器的ID。我们可以使用以下命令查看正在运行的容器: docker ps 在上…

    other 2023年5月6日
    00
  • Angular.js之作用域scope’@’,’=’,’&’实例详解

    Angular.js之作用域(scope) ‘@’, ‘=’, ‘&’ 实例详解 Angular.js是一个流行的JavaScript框架,它使用了一种称为作用域(scope)的概念来管理数据和事件。作用域(scope)是一个对象,它将控制器(controller)和视图(view)连接起来,使它们能够相互通信。 在Angular.js中,作用域(s…

    other 2023年8月19日
    00
  • python单元测试框架pytest的使用示例

    以下是对Python单元测试框架pytest的使用示例的完整攻略: 安装pytest 首先,确保您已经安装了Python。然后,使用以下命令安装pytest: pip install pytest 编写测试用例 创建一个名为test_example.py的文件,并编写测试用例。例如: def add_numbers(a, b): return a + b d…

    other 2023年10月18日
    00
  • 苹果 macOS 14 开发者预览版 Beta 2 今日发布(附更新内容汇总)

    苹果 macOS 14 开发者预览版 Beta 2 今日发布(附更新内容汇总) 简介 苹果公司在今天发布了 macOS 14 开发者预览版 Beta 2,新版系统主要针对开发者测试和体验,同时也包含了一些新功能和更新。在本文中,我们将向大家介绍这个版本的更新内容和特点,以及在更新过程中需要注意的问题和注意事项。 更新内容 新增软件功能:新增了“图书馆”功能,…

    other 2023年6月26日
    00
  • Oracle 查询表信息获取表字段及字段注释

    获取表字段及字段注释是在进行数据库开发时非常常见的需求,Oracle提供了一些SQL命令可以快速查询到表字段信息及注释。下面将详细讲解如何使用Oracle查询表信息获取表字段及字段注释的完整攻略。 1. 查询表字段信息 简介 查询表字段信息就是查询某个表的所有字段名、数据类型、长度等信息。 SQL命令 DESC table_name; 示例 假设有一个名为u…

    other 2023年6月25日
    00
  • 详解C语言内核字符串转换方法

    详解C语言内核字符串转换方法 在C语言中,字符串是一种非常重要的数据类型,而字符串的转换也是程序中常见的操作。本文将详细讲解C语言中内核字符串转换的方法。 atoi和atof 在C语言中,可以使用atoi和atof来进行字符串和数字之间的转换。atoi可以将一个字符串转换成int类型,而atof则可以将一个字符串转换成float类型。 下面是atoi和ato…

    other 2023年6月20日
    00
  • 易语言读环境变量命令使用讲解

    易语言读环境变量命令使用讲解 在易语言中,想要读取环境变量的值,我们可以使用系统命令GetEnvironmentVariableA来实现。本文将详细介绍如何在易语言中使用GetEnvironmentVariableA来读取环境变量的值,包括如何调用解释函数、函数的参数、返回值的处理等内容。 调用解释函数 要在易语言中调用GetEnvironmentVaria…

    other 2023年6月27日
    00
  • Java/Js下使用正则表达式匹配嵌套Html标签

    Java/Js下使用正则表达式匹配嵌套Html标签的攻略 正则表达式是一种强大的工具,可以用于匹配和处理文本数据。在Java和JavaScript中,我们可以使用正则表达式来匹配嵌套的HTML标签。下面是一个详细的攻略,包含了使用正则表达式匹配嵌套HTML标签的过程和两个示例说明。 1. 理解HTML标签的嵌套结构 在开始之前,我们需要理解HTML标签的嵌套…

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