首页 >后端开发 >C++ >C# 中的覆盖与隐藏:有什么区别?

C# 中的覆盖与隐藏:有什么区别?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-18 08:32:09120浏览

Overriding vs. Hiding in C#: What's the Difference?

C# 中的方法重写与方法隐藏

在 C# 中,方法重写和方法隐藏是两种不同的机制,用于修改继承的方法。

方法重写 (Overriding)

方法重写涉及在基类中创建虚方法 (virtual),并在派生类中重新定义其实现。这允许派生类提供更具体或修改后的方法版本,同时保留相同的方法名称和参数。

方法重写用于以下情况:

  • 您希望派生类提供对从基类继承的方法的自定义实现。
  • 基类方法标记为virtual
  • 派生类中的方法声明中使用 override 关键字。

方法隐藏 (Method Hiding)

方法隐藏涉及创建具有与基类方法相同名称和参数的新方法 (new)。与方法重写不同,方法隐藏在派生类中创建了一个全新的方法,并且不会修改基类方法。

方法隐藏用于以下情况:

  • 您希望在派生类中引入一个与基类方法同名的不同方法。
  • 基类中的方法未声明为virtual
  • 派生类中的方法声明中使用 new 关键字。

实际应用

方法重写 (Overriding):

  • 自定义继承的方法
  • 提供多态行为

方法隐藏 (Method Hiding):

  • 向前兼容性(避免将来添加新方法时出现问题)
  • 返回类型的协变性(从基类方法返回派生类实例)

示例

以下示例演示了方法重写和方法隐藏:

<code class="language-csharp">class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("Generic animal sound");
    }
}

class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Bark");
    }

    public new void Run()   // 方法隐藏
    {
        Console.WriteLine("Dog running");
    }
}</code>

在此示例中,MakeSound 方法在 Dog 类中被重写以提供具体的实现。Run 方法被隐藏,在 Dog 类中创建了一个新方法。

以上是C# 中的覆盖与隐藏:有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn