C# 中方法重写和方法隐藏的区别

17 Mar 2025 | 4 分钟阅读

在本文中,我们将讨论方法重写方法隐藏。但在讨论它们之间的区别之前,我们必须了解方法重写和方法隐藏。

什么是方法重写?

方法重写是面向对象编程 (OOP) 中的一个重要概念。派生类提供了对其基类中已定义和实现的方法的自定义实现。它使派生类能够在保留父类方法签名(名称、返回类型和参数)的同时,提供其自己的方法版本。

方法重写的语法和应用

C# 中的方法重写是通过在派生类中使用 override 关键字实现的。派生类的重写函数必须与其在基类中使用的方法具有相同的签名(名称、返回类型和参数)。

示例

让我们举一个例子来说明 C# 中方法重写的用法。

输出

This is the child class method.

方法重写的关键点

C# 中的方法重写有几个关键点。一些主要的要点如下:

  • 方法重写与继承有关,因为它允许子类提供其超类派生的方法的特定版本。
  • override 关键字应用于派生类,以明确表示该方法已替换基类方法。
  • 动态绑定允许多态行为,通过在执行时根据对象的实际类型解析方法调用。

什么是方法隐藏?

方法隐藏,也称为方法遮蔽,当派生类定义了一个与基类方法同名且声明相同的方法时发生。但是,与方法重写相比,它不保留相同的方法签名,也不涉及多态行为。

方法隐藏的语法和应用

在 C# 中,方法隐藏可以通过使用派生类中的new 关键字来显式最小化基类方法来实现。它在派生类中生成一个新方法,该方法与基类中的方法具有相同的标识,但它不是重写。

方法隐藏的关键点

C# 中的方法隐藏有几个关键点。一些主要的要点如下:

  • 多态性:方法隐藏不支持多态性,因为方法调用是根据引用类型而不是实际对象类型在编译时解析的。
  • New 关键字的使用:new 关键字用于清楚地表明派生类中的方法正在隐藏基类中的方法,而不是重写它。
  • 编译时绑定:要调用的方法是根据指定的引用类型在编译时确定的。因此,它不显示多态行为。

方法重写和方法隐藏之间的主要区别

Difference between Method Overriding and Method Hiding in C#

C# 中方法重写方法隐藏之间有几个区别。方法重写和方法隐藏之间的主要区别如下:

特点方法重写方法隐藏
基本功能它允许子类为基类中存在的方法提供新实现。它允许派生类创建一个与基类中的方法具有相同签名的新方法,但不一定重写它。
继承它直接与继承相关,因为它发生在基类及其派生类之间。继承也涉及其中,因为派生类扩展了基类功能。
多态支持多态性,允许在运行时进行动态方法绑定,从而根据实际对象类型生成方法。它不支持多态性。方法调用是根据其引用类型在编译时处理的。
关键字使用在派生类中使用 override 关键字,以指示基类方法被正确替换。在派生类中,使用 new 关键字显式减少基类方法。
方法签名它保持与基类中方法本身相似的方法签名(名称、返回类型、参数)。它声明一个与基类方法同名但具有不同方法声明(如果需要)的其他方法。
动态绑定它允许根据运行时对象的实际类型动态生成方法,从而实现多态行为。方法调用是根据引用类型在构建时解析的,从而实现稳定的绑定。
目的它主要用于修改或扩展基类方法的函数。通常用于进行局部更改或添加新功能,而无需更改基本类方法。
显式声明基类方法使用 virtual 关键字标识,而派生类方法使用 override 关键字标记。必须使用 new 关键字来有效地指示隐藏基类方法的目的。
运行时行为它允许在运行时进行多态行为,通过根据实际对象类型解析方法调用。方法调用是根据引用类型解析的,这会导致编译时绑定,缺乏多态性。
设计模式模板方法模式等模式需要子类重写基类方法来更改函数。由于缺乏多态性以及代码可读性问题,它通常不用于设计模式。