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#以流方式读socket超时设置的实例

    下面我为您详细讲解一下“C#以流方式读socket超时设置的实例”的完整攻略。 步骤一:创建Socket对象 在使用C#以流方式读socket数据时,首先要创建一个Socket对象,用于建立与远程主机的连接。创建Socket对象的方式可以是如下代码: Socket socket = new Socket(AddressFamily.InterNetwork,…

    C# 2023年5月15日
    00
  • C# 实现Table的Merge,Copy和Clone

    C# 中的 DataTable 类提供了许多方法,用于操作表格数据。其中,Merge、Copy 和 Clone 方法可以实现表格的合并、复制和克隆,可根据具体需求来使用。 Merge 方法 Merge 方法可以将两个表格合并为一个表格。该方法有两个参数:要合并的表格和合并方式。其中,合并方式可选的值有两个:Add 和 Merge。Add 是添加模式,将另一个…

    C# 2023年6月1日
    00
  • C#文件非占用读取与帮助类FileHelper

    C#的FileHelper类库提供了许多方便的方法来处理文件读写操作,FileHelper类库中的File类封装了很多文件读写的方法,同时还提供了非占用读取文件的方法,可以有效防止文件被占用而无法进行读取或写入操作。 非占用读取文件 在进行文件读写操作时,有时候文件可能被其他应用程序或者进程占用而无法进行读写操作。FileHelper类库提供了一种解决方法:…

    C# 2023年6月1日
    00
  • Entity Framework使用Code First模式管理存储过程

    1.设置数据库连接字符串 首先,在应用程序的配置文件中设置数据库连接字符串。这里以使用SQL Server为例,将连接字符串命名为“DefaultConnection”: <connectionStrings> <add name="DefaultConnection" connectionString="Da…

    C# 2023年6月3日
    00
  • C#中的程序集和反射介绍

    下面我将详细讲解“C#中的程序集和反射介绍”的完整攻略。 什么是程序集 程序集是指包含在一个单独文件中的、可执行的代码集合。在.NET中,程序集分为两种类型:可执行文件(.exe)和动态链接库文件(.dll)。程序集具有版本控制、程序入口点、程序集名称、语言支持、资源文件和程序集清单等特性。 程序集有两种:可托管程序集和非托管程序集。可托管程序集是指含有CI…

    C# 2023年6月1日
    00
  • ASP.NET/C#中如何调用动态链接库DLL

    调用动态链接库(DLL)是在编程过程中常见的需求,本文将介绍如何在ASP.NET/C#中调用DLL文件。具体步骤如下: 第一步:在项目中添加DLL文件 将需要调用的DLL文件添加到项目中,通常可以通过以下两种方式实现: 在Visual Studio解决方案中添加现有项:右键单击要添加文件的文件夹,选择“添加现有项”,在文件对话框中选择DLL文件,单击“添加”…

    C# 2023年5月31日
    00
  • C#线程委托BeginInvoke与EndInvoke的用法

    当涉及到多线程编程时,往往需要使用BeginInvoke和EndInvoke这两个方法。 BeginInvoke允许我们异步执行代码块,并立即返回主线程,而EndInvoke则允许我们等待异步代码块的完成并检索其结果。 一、BeginInvoke和EndInvoke的基本用法 以下是BeginInvoke和EndInvoke基本用法的示例。假设有以下定义的委…

    C# 2023年5月15日
    00
  • C#使用List类实现动态变长数组的方法

    下面我将详细讲解C#使用List类实现动态变长数组的方法的完整攻略: 什么是List类 List类是一个通用的动态数组,可以存储任何类型的元素(包括自定义类型)。它继承自 IList 接口并实现了 ICollection 和 IEnumerable 接口。它是一个可调整大小的数组,能够自动扩展和缩小以适应元素的数量。 List类的操作方法 List类的常用方…

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