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 环境变量的配置方法 1. 为什么需要配置 Android 环境变量 在使用 Android 开发工具时,通常需要使用到一些命令行工具,如:adb,fastboot 等等。如果没有配置 Android 环境变量,那么每次使用这些工具时需要切换到对应的目录,才可以执行该命令,非常麻烦。正因…

    other 2023年6月27日
    00
  • mysql中unionall用法

    MySQL中UNION ALL用法攻略 在MySQL中,UNION ALL是一种用于合并两个或多个SELECT语句结果集的操作符。本攻略将详细介绍UNION ALL的用法,并提供两个示例说明。 语法 UNION ALL的语法如下: SELECT column1, column2, … FROM table1 UNION ALL SELECT column…

    other 2023年5月6日
    00
  • 四种方法解决div高度自适应问题

    以下是关于“四种方法解决div高度自适应问题”的完整攻略。 问题描述 在Web开发中,经常会遇一个问题:当一个div元素中的内容度不确定时,如何该div元素的高度自适应? 解决 以下是四种解决方法: 方法一使用float属性 可以通过在div元素中使用“属性来实现高度自适应。具体步骤如下: 在div元素中添加float属性: “`html “` 在di…

    other 2023年5月8日
    00
  • Redis高并发场景下秒杀超卖解决方案(秒杀场景)

    以下是Redis高并发场景下秒杀超卖解决方案的完整攻略: 1. 背景 在秒杀活动中,为了保证公平性和抢购速度,都会采用类似抢票系统的方式,设置倒计时等待到指定时间后一起抢购。但是在高并发场景下,会出现超卖现象,即库存被卖空,但是前端用户仍然可以购买到商品,这会带来很多问题。这时候就需要使用Redis实现秒杀锁,解决超卖问题。 2. 解决方案 使用Redis实…

    other 2023年6月26日
    00
  • 辐射4力量系perk技能点详细介绍

    辐射4力量系Perk技能点详细介绍 引言 在《辐射4》这个 RPG 游戏中,Perk 技能点可以让你的角色变得更加强大。本文将详细介绍力量系Perk技能点,帮助你在游戏中更好地利用这些技能点。 力量系Perk技能点 以下是力量系Perk技能点的列表: 重击 (Big Leagues) 类型:通用 Perk 级别:4 格斗武器伤害增加20%/40%/60%/8…

    other 2023年6月27日
    00
  • C语言超细致讲解循环语句

    C语言超细致讲解循环语句 前言 循环语句是一种非常基础也非常重要的程序语句。在实际中,我们常常需要对一段代码进行重复执行。这时候循环结构就变得非常实用。C语言支持多种形式的循环操作,包括for语句、while语句和 do while语句。在本篇文章中,我们将详细讲解C语言中的循环语句相关内容。 for循环 for循环是一种基本的循环语句,它的核心是重复执行一…

    other 2023年6月27日
    00
  • 魔兽6.2补丁更新卡初始化怎么办_卡初始化解决偏方

    以下是针对“魔兽6.2补丁更新卡初始化”的完整攻略: 问题描述 在更新魔兽世界的6.2补丁后,部分用户反映出现了卡初始化的问题,导致游戏无法正常运行。这个问题的解决方法如下。 解决方法 方法一:清空缓存和临时文件 第一步:按下“Win + R”组合键,打开运行窗口。 第二步:在运行窗口中输入“%temp%”并回车,打开临时文件夹。 第三步:选中全部文件和文件…

    other 2023年6月20日
    00
  • css类选择器的使用方法详解

    CSS类选择器的使用方法详解 1. 什么是类选择器? CSS类选择器是一种用于选中具有相同类名的元素的选择器。它以.开头,后跟类名,可以选择多个元素并对其应用相同的样式。 2. 如何使用类选择器? 2.1 在HTML中定义类名 在HTML标签的class属性中定义类名,并为多个元素分配相同的类名。例如: <p class="highlight…

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