C# new和override的区别分析

yizhihongxing

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#中使用JSON.NET实现JSON、XML相互转换

    下面是使用JSON.NET实现JSON、XML相互转换的攻略: 1. 引入JSON.NET包 在C#中实现JSON、XML相互转换,需要引入JSON.NET包。可以通过NuGet包管理器来安装JSON.NET。打开NuGet包管理器,搜索JSON.NET,然后安装即可。 2. 将JSON字符串转为XML格式 在使用JSON.NET将JSON字符串转为XML格…

    C# 2023年5月15日
    00
  • Unity3D UGUI特效之Image高斯模糊效果

    下面我将详细讲解“Unity3D UGUI特效之Image高斯模糊效果”的完整攻略。 1. 什么是高斯模糊? 高斯模糊是一种图像处理算法,是对图像进行模糊处理的一种方法,模糊程度随着处理程度的加深而不断加深,可以在一定程度上使图像变得更加柔和,视觉效果更加温和自然。 2. Unity3D中实现高斯模糊的方法:Shader实现 在Unity3D中,我们可以通过…

    C# 2023年6月3日
    00
  • 在 C# 中使用 Span 和 Memory 编写高性能代码的详细步骤

    在 C# 中,Span 和 Memory 是用于优化代码性能的关键类型。Span 是一种结构体类型,它将对象内存表示为连续的、可编辑的范围。Memory 则是一个类类型,可以包装一段内存以及操作该内存的方法。使用这两种类型,可以使代码更高效地使用内存和更快地执行。 下面介绍一些使用 Span 和 Memory 编写高性能代码的详细步骤。 步骤一:创建 Spa…

    C# 2023年6月3日
    00
  • c#语言使用Unity粒子系统制作手雷爆炸

    下面是详细的攻略: 前置知识 在学习如何使用Unity粒子系统制作手雷爆炸前,我们需要先了解一些前置知识。 Unity游戏引擎 Unity是一个跨平台的游戏引擎,广泛应用于游戏开发、虚拟现实、增强现实和其他交互式体验的开发。Unity中的每个场景都包含一个场景对象,该对象定义了场景中所有其他对象的组织结构。 C#编程语言 C#是一种由Microsoft开发的…

    C# 2023年6月3日
    00
  • .NET几种微服务框架,你用过吗?

    最近有群友问,.NET有哪些微服务框架?.NET的微服务框架还真不多,一般企业都会自己搭建微服务框架,或者基于其它框架搭建微服务(比如abp)。本文将介绍几种微服务框架,供大家学习参考。 一、Service Fabric 简介: Service Fabric 是一个微服务框架,它由微软开发并托管在 Azure 上。它提供了一种分布式系统的方式,允许开发人员在…

    C# 2023年5月11日
    00
  • ASP.NET下对cookies的操作实现代码

    下面我将详细讲解在ASP.NET下对cookies的操作实现代码的完整攻略,包括如何创建、读取、更新和删除cookies。 创建Cookies 使用ASP.NET创建cookies的最简单方法是通过HttpCookie类创建cookies,HttpCookie类代表浏览器中的cookie对象,可以设置cookies的名称、值、过期时间、域和其他属性。以下是创…

    C# 2023年5月31日
    00
  • docker部署Asp.net core应用的完整步骤

    Docker部署Asp.net Core应用的完整步骤 Docker是一种流行的容器化技术,可以帮助我们轻松地部署和管理应用程序。在本攻略中,我们将介绍如何使用Docker部署Asp.net Core应用程序,并提供两个示例说明。 准备工作 在使用Docker部署Asp.net Core应用程序之前,我们需要完成以下准备工作: 安装Docker。 我们需要在…

    C# 2023年5月16日
    00
  • 详解asp.net core 依赖注入

    详解ASP.NET Core 依赖注入 ASP.NET Core 依赖注入是一种设计模式,它允许我们将对象的创建和管理从应用程序代码中分离出来。这种分离使得应用程序更加灵活、可测试和可维护。本攻略将详细介绍ASP.NET Core 依赖注入的概念、用法和示例。 什么是依赖注入? 依赖注入是一种设计模式,它允许我们将对象的创建和管理从应用程序代码中分离出来。在…

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