首页 >后端开发 >C++ >C#中的方法阴影和覆盖有什么区别?

C#中的方法阴影和覆盖有什么区别?

Patricia Arquette
Patricia Arquette原创
2025-01-28 14:05:09229浏览

What's the Difference Between Method Shadowing and Overriding in C#?

C# 方法隐藏与重写:详解

在C#中,派生类可以通过两种不同的方式操作基类方法:方法隐藏和方法重写。理解这两种概念的区别对于有效的代码维护和继承实现至关重要。

方法隐藏

当一个类声明一个与基类中方法同名的新方法,但没有显式声明为重写方法时,就会发生方法隐藏。新声明的方法有效地隐藏了基类的实现,并提供了它自己的独立实现。

示例:

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

当B类的实例clB调用clB.Foo()时,它执行B类中定义的实现,输出“1”。但是,当我们将clB强制转换为A类时,调用者访问Foo()的基类实现,输出“5”。

方法重写

与隐藏不同,方法重写显式地用派生类中的新实现替换基类方法的实现。这是通过使用override关键字实现的。

示例:

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

当B类的实例clB调用clB.Bar()时,它执行B类中的重写实现,输出“1”。将clB强制转换为A类不会影响行为,因为始终调用重写实现。

主要区别

  • 隐藏隐藏了基类方法: 隐藏在派生类中创建了一个新方法,该方法隐藏了基类的实现。重写替换了基类的实现。
  • 重写需要关键字: 重写需要使用override关键字来显式指示预期的替换。
  • 隐藏破坏继承: 通过隐藏基类的实现,隐藏可能会破坏继承链。重写保持继承关系。
  • 隐藏方法不是多态的: 隐藏的方法不受多态机制(如动态绑定)的影响。重写的方法表现出多态行为,根据实际对象类型做出不同的响应。

以上是C#中的方法阴影和覆盖有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

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