C# new和override的区别分析

C# new和override的区别分析

在 C# 中,newoverride 都可以用于继承中方法的重写,它们具有相似的功能,但是在实现上有些区别。

1. new 关键字

new 关键字可以在子类中隐藏基类中已有的同名方法,即子类重写该方法并且使用 new 关键字进行修饰,这样当通过子类对象调用该方法时,就会调用子类中的方法,而不会调用基类中的同名方法。

示例代码:

class BaseClass
{
    public void Show()
    {
        Console.WriteLine("BaseClass.Show() method called.");
    }
}

class DerivedClass : BaseClass
{
    public new void Show()
    {
        Console.WriteLine("DerivedClass.Show() method called.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        DerivedClass obj = new DerivedClass();
        obj.Show();
        ((BaseClass)obj).Show();
        Console.ReadKey();
    }
}

运行结果:

DerivedClass.Show() method called.
BaseClass.Show() method called.

在上面的示例代码中,DerivedClass 中的 Show() 方法通过 new 关键字进行了修饰,当通过 DerivedClass 对象调用该方法时,就会调用子类中的方法;当通过 (BaseClass)obj 转换后的对象调用 Show() 方法时,就会调用基类中的同名方法。

2. override 关键字

override 关键字可以在子类中重写基类中同名方法,并且将该方法重新实现,覆盖掉基类中的实现。

示例代码:

class BaseClass
{
    public virtual void Show()
    {
        Console.WriteLine("BaseClass.Show() method called.");
    }
}

class DerivedClass : BaseClass
{
    public override void Show()
    {
        Console.WriteLine("DerivedClass.Show() method called.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        BaseClass obj1 = new BaseClass();
        obj1.Show();
        DerivedClass obj2 = new DerivedClass();
        obj2.Show();
        BaseClass obj3 = new DerivedClass();
        obj3.Show();
        Console.ReadKey();
    }
}

运行结果:

BaseClass.Show() method called.
DerivedClass.Show() method called.
DerivedClass.Show() method called.

在上面的示例代码中,DerivedClass 中的 Show() 方法通过 override 关键字进行了修饰,当通过 DerivedClass 或者 (BaseClass)obj 转换后的对象调用 Show() 方法时,就会调用子类中的方法,而不会调用基类中的同名方法。

3. 总结

newoverride 关键字都是用于继承中方法的重写,但是它们的实现方式略有不同。使用 new 关键字修饰的方法可以隐藏基类中的同名方法,使用 override 关键字修饰的方法则是完全重写基类中的同名方法。

所以,当需要重写基类中的方法,并且重新实现该方法时,应该使用 override 关键字;当需要在子类中隐藏基类中的同名方法时,应该使用 new 关键字。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# new和override的区别分析 - Python技术站

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

相关文章

  • C#类中方法的执行顺序是什么

    C#中类的方法执行顺序是按照继承层次关系和调用顺序决定的,具体执行顺序如下: 静态构造函数 非静态构造函数 静态方法 非静态方法 其中,静态成员在程序启动时就已经存在,因此静态构造函数是在其他方法之前第一个运行的。而非静态成员只有在实例化对象后才会存在,因此非静态构造函数是在静态构造函数之后但在其他方法之前运行的。 下面是两个简单的例子,说明类中方法的执行顺…

    C# 2023年6月1日
    00
  • C#无损转换Image为Icon的方法

    下面我将为您详细讲解“C#无损转换Image为Icon的方法”的完整攻略。 介绍 首先,我们需要了解一下什么是ICO格式文件。ICO文件是Windows操作系统中图标的标准格式,它可以保存不同大小和颜色深度的图标。 在C#中,我们可以使用System.Drawing.Imaging命名空间中的Icon和IconInfo类来操作ICO文件。接下来,我将介绍如何…

    C# 2023年6月1日
    00
  • C#服务器NFS共享文件夹搭建与上传图片文件的实现

    下面是“C#服务器NFS共享文件夹搭建与上传图片文件的实现”的完整攻略。 搭建NFS服务器 安装NFS服务器软件 在Linux系统上搭建NFS服务器,首先需要安装NFS服务器软件。可以使用以下命令安装: sudo apt-get install nfs-kernel-server 创建NFS共享目录 在Linux系统上,需要创建一个目录作为NFS共享目录。可…

    C# 2023年6月1日
    00
  • 详解ABP框架中领域层的领域事件Domain events

    ABP框架是一套现代化的ASP.NET Core框架,提供了领域驱动设计(DDD)所需要的一些重要组件和模块。其中领域事件(Domain events)是ABP框架中领域层的一个重要概念,本文将详细解析ABP框架中领域层的领域事件。 领域事件概述 领域事件是一个有状态的对象,用于描述在系统中发生的一些重要事情。域事件是不可修改的,因为它们都是不可变的。领域事…

    C# 2023年6月3日
    00
  • C#写差异文件备份工具的示例

    下面详细讲解“C#写差异文件备份工具的示例”的完整攻略。 1. 确定需求和技术方案 在开始开发前,我们需要明确这个备份工具的需求和技术方案。这个备份工具需要通过比对源文件和目标文件的差异,只保留源文件中的新增、修改、删除等操作,实现对文件的备份。 技术方案可以借助Git等版本控制工具的基本原理来实现。通过计算文件内容的hash值,比较源文件和目标文件的has…

    C# 2023年6月6日
    00
  • C#基于XNA生成随机颜色的方法

    当您开发基于XNA的C#游戏时,您可能需要生成随机颜色,例如用于绘制游戏对象。下面是简单的方法,您可以使用它来生成随机颜色。 方法一 使用Random对象,随机生成颜色的RGB值,然后使用Color.FromRgb方法将RGB值转换为颜色对象,最后使用颜色对象进行绘制。 Random random = new Random(); Color randomCo…

    C# 2023年6月3日
    00
  • c#实现将pdf转文本的示例分享

    下面我会给出详细的 “c#实现将pdf转文本” 的攻略。 准备工作 在正式开始之前,你需要准备以下几个工具: 安装 .NET Framework,如果你已经安装了Visual Studio那么可以省略这一步。可以在 Microsoft 的官网上下载对应的版本。 安装 PDFBox .NET 库,PDFBox是Java语言编写的一个库,PDFBox .NET是…

    C# 2023年6月7日
    00
  • c# SqlDataAdapter中的Fill是怎么实现的

    我们先来介绍一下SqlDataAdapter,它是一个在C#中用于填充DataSet和DataTable的重要类。SqlDataAdapter提供了以下核心方法: Fill(DataSet):将数据填充到DataSet中。 Fill(DataTable):将数据填充到DataTable中。 Fill(int, int, DataTable[]):将一组数据填…

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