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# 4.0新特性“缺省参数”的实现详解

    C# 4.0 新特性:缺省参数 什么是缺省参数? 缺省参数(default parameter)是指在声明方法时,可以给方法的参数设置默认值,这样在调用方法时如果调用者没有为参数传入特定的值,就会使用参数的默认值。缺省参数使得编写方法时更加方便,简化了方法调用者的代码。 如何实现缺省参数? 在 C# 4.0 中,我们可以在声明方法时使用“=值”的方式来给方法…

    C# 2023年5月14日
    00
  • C#操作配置文件app.config、web.config增删改

    C#操作配置文件app.config、web.config增删改可以使用System.Configuration命名空间中的ConfigurationManager和Configuration类。下面分别介绍这两个类的使用方法: 1.使用ConfigurationManager读写配置文件 ConfigurationManager类可以方便地读写配置文件,其…

    C# 2023年6月1日
    00
  • C#从数据库读取数据到DataSet并保存到xml文件的方法

    下面是详细讲解“C#从数据库读取数据到DataSet并保存到xml文件的方法”的完整攻略: 步骤1:连接数据库并读取数据 首先,需要在代码中连接数据库,从中读取数据,并将其存储在内存中的 DataSet 中。可以使用 SqlConnection 和 SqlDataAdapter 类来实现这个步骤。下面是一个示例代码: string connectionStr…

    C# 2023年5月31日
    00
  • C#实现自定义打印文字和图片的示例代码

    下面是“C#实现自定义打印文字和图片的示例代码”的完整攻略: 1. 准备工作 首先,你需要创建一个Windows窗口应用程序,可以使用Visual Studio来创建项目。程序中需要添加一个打印预览控件(PrintPreviewControl),用于显示要打印的内容预览。同时,也需要添加一个打印对话框(PrintDialog),用于打印设置和选择打印机。下面…

    C# 2023年6月1日
    00
  • C# 添加、修改以及删除Excel迷你图表的实现方法

    这里是详细的攻略: C# 添加、修改以及删除Excel迷你图表的实现方法 1. 前置条件 在开始实现前,需要准备以下环境: Visual Studio或其他开发环境。 Microsoft Office Excel。 在代码中,我们需要用到以下几个命名空间: using Microsoft.Office.Interop.Excel; using System.…

    C# 2023年6月8日
    00
  • C#通过属性名称获取(读取)属性值的方法

    获取C#对象的属性值通常可以使用对象的属性名称来实现。在 C# 中,属性名称是一个字符串,可以在运行时利用反射机制获取对象的属性信息,并通过属性名称获取属性值。 首先,在 C# 中利用反射机制获取对象的属性信息,可以通过以下步骤来实现: 获取对象的类型信息:使用Type.GetType或typeof关键字获取对象类型信息,例如: csharp Type ty…

    C# 2023年5月31日
    00
  • C# DateTime.AddDays()方法: 将指定的天数加到指定的日期上

    DateTime.AddDays()是C#中DateTime结构体提供的一个方法,用于将DateTime对象的日期值增加指定的天数。其方法的声明如下: public DateTime AddDays(double value); 其中value参数为需要增加的天数,可以是一个正数,也可以是一个负数。 以下是使用该方法的两个实例: 计算一个日期的前一天 假设有…

    C# 2023年4月19日
    00
  • c#图片缩放图片剪切功能实现(等比缩放)

    C#图片缩放图片剪切功能实现(等比缩放) 在C#中,实现缩放和剪切图片是很常见的需求。本文将介绍如何使用C#实现等比缩放图片,并提供两个示例说明。 1. 等比缩放图片 1.1 引用命名空间 using System.Drawing; using System.Drawing.Imaging; 1.2 创建一个函数 public static void Zoo…

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