首页 > 后端开发 > C++ > C# 中的重写与方法隐藏:我什么时候应该使用哪个?

C# 中的重写与方法隐藏:我什么时候应该使用哪个?

Susan Sarandon
发布: 2025-01-18 08:17:08
原创
385 人浏览过

Overriding vs. Method Hiding in C#: When Should I Use Which?

了解 C# 中的重写和方法隐藏

本文阐明了 C# 中重写和方法隐藏之间的区别,这是两种强大但经常令人困惑的继承机制。 选择正确的方法对于构建健壮且可维护的面向对象应用程序至关重要。

重写:扩展基类行为

重写是面向对象编程的基石,它允许派生类为其基类中已定义的方法提供专门的实现。 至关重要的是,方法的签名(名称、参数和返回类型)保持不变。 这可以实现多态性,即根据对象的运行时类型而不是其声明的类型来执行正确的方法。

方法隐藏:隐藏基类方法

相反,方法隐藏涉及在派生类中创建一个与基类方法共享相同名称但具有不同签名(例如不同的参数类型或返回类型)的方法。 这有效地屏蔽了派生类中的基类方法。 无论变量声明的类型如何,编译器将始终调用派生类的方法。

重写和方法隐藏的策略应用

当您需要扩展或细化基类方法的行为同时保留其基本目的时,重写是首选。 它对于实现多态性和遵守健全的面向对象设计原则至关重要。

方法隐藏虽然不太常见且常常不被鼓励,但却找到了利基应用:

  • 维护向后兼容性:在不破坏现有派生类的情况下向基类添加新方法。
  • 协变:允许派生类中使用更专门的返回类型,同时保持与基类的兼容性。

说明性示例

让我们看一下 C# 代码示例:

<code class="language-csharp">class BaseClass
{
    public virtual void DisplayNumber()
    {
        Console.WriteLine(12);
    }

    public virtual void DisplayText()
    {
        Console.WriteLine("abc");
    }
}

class DerivedClass : BaseClass
{
    public new void DisplayNumber()
    {
        Console.WriteLine(42);
    }

    public override void DisplayText()
    {
        Console.WriteLine("xyz");
    }
}

BaseClass baseInstance = new BaseClass();
BaseClass derivedInstance = new DerivedClass();
DerivedClass clearlyDerived = new DerivedClass();

baseInstance.DisplayNumber(); // Output: 12
baseInstance.DisplayText();  // Output: abc
derivedInstance.DisplayNumber(); // Output: 12
derivedInstance.DisplayText();  // Output: xyz
clearlyDerived.DisplayNumber(); // Output: 42
clearlyDerived.DisplayText();  // Output: xyz</code>
登录后复制

观察到 DisplayNumber() 隐藏在 DerivedClass 中,而 DisplayText() 被覆盖。 输出演示了运行时类型如何决定执行哪个方法。

结论:为了清晰起见,优先考虑覆盖

重写使派生类能够在不破坏已建立的接口的情况下定制基类功能。 方法隐藏虽然在有限的情况下有用,但应谨慎使用以避免歧义并保持清晰的继承层次结构。 在大多数情况下,重写提供了更优雅且可维护的解决方案。

以上是C# 中的重写与方法隐藏:我什么时候应该使用哪个?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板