C# 中的 virtual/override 与 new 关键字:何时使用哪个关键字进行方法重写?
在基类中定义方法时,程序员常常面临是否使用“virtual”或“new”关键字的难题。这个决定会显着影响派生类中方法重写的行为。
Virtual Override
在基类方法中使用“virtual”关键字表示它可以在派生类中被重写。要重写该方法,派生类必须使用“override”关键字。这确保了重写的方法按预期工作,维护继承层次结构和多态性。
当派生类调用重写的方法时,它将执行重写版本,即使持有对象的引用变量是基类类型。这称为后期绑定,并允许动态行为。
New 关键字
相反,派生类方法中的“new”关键字声明一个新方法,该方法隐藏具有相同名称的继承方法。使用时,新方法在派生类中替换继承方法,从而破坏多态性。
当派生类调用用“new”声明的方法时,它将执行该新方法,而不管持有对象的引用变量的类型如何。这被认为是早期绑定,并阻碍多态性。
示例
考虑以下代码示例:
public class Base
{
public virtual bool DoSomething() { return false; }
}
public class Derived : Base
{
public new bool DoSomething() { return true; }
}
如果您将 Derived 的实例分配给 Base 类型的变量并调用 DoSomething(),则如果使用 virtual/override,结果将为 false,但如果使用 new,则结果为 true。这突出了后期绑定和早期绑定之间的区别。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3