首页 >后端开发 >C++ >C#中的覆盖与阴影:您什么时候应该使用每种技术?

C#中的覆盖与阴影:您什么时候应该使用每种技术?

Linda Hamilton
Linda Hamilton原创
2025-01-28 13:56:09895浏览

Overriding vs. Shadowing in C#: When Should You Use Each Technique?

C#中的方法重写与隐藏

在继承方面,C# 提供了两种不同的技术来重新定义基类中的方法:重写和隐藏。这两种技术在工作方式和对继承链的影响方面存在根本区别。

隐藏

隐藏允许您创建一个与基类中方法同名的新方法,但不使用 override 关键字。此方法成为派生类的局部成员,将基类方法隐藏起来。当派生类的实例调用隐藏方法时,它会直接执行该类中的实现,而不管继承层次结构如何。

示例:

<code class="language-csharp">class A
{
   public int Foo(){ return 5;}
   public virtual int Bar(){return 5;}
}
class B : A
{
   public new int Foo() { return 1;}     //隐藏
   public override int Bar() {return 1;} //重写
}</code>

在此示例中,方法 Foo 在类 B 中被隐藏,而方法 Bar 被重写。当 clBB 的实例)调用 Foo 时,它返回 1,因为直接执行 B 中的 Foo

重写

与隐藏相反,重写需要 override 关键字。它允许您在基类中定义虚拟方法的新实现。当派生类的实例调用重写的方法时,它会按照继承链执行派生类中的实现。

示例:

在前面的示例中,类 B 中的方法 Bar 被重写。当 clB 调用 Bar 时,它返回 1,因为 B 中的 Bar 是重写实现。

隐藏与重写的区别

隐藏和重写之间的选择取决于您的具体需求:

  • 隐藏: 当您想要隐藏从基类继承的方法并改用局部实现时,使用隐藏。
  • 重写: 当您想要重新定义继承的方法并执行特定于派生类的实现时,使用重写。

以上是C#中的覆盖与阴影:您什么时候应该使用每种技术?的详细内容。更多信息请关注PHP中文网其他相关文章!

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