C# 中的 virtual/override 与 new 关键字:何时使用哪个关键字进行方法重写?
在基类中定义方法时,程序员常常面临是否使用“virtual”或“new”关键字的难题。这个决定会显着影响派生类中方法重写的行为。
Virtual Override
在基类方法中使用“virtual”关键字表示它可以在派生类中被重写。要重写该方法,派生类必须使用“override”关键字。这确保了重写的方法按预期工作,维护继承层次结构和多态性。
当派生类调用重写的方法时,它将执行重写版本,即使持有对象的引用变量是基类类型。这称为后期绑定,并允许动态行为。
New 关键字
相反,派生类方法中的“new”关键字声明一个新方法,该方法隐藏具有相同名称的继承方法。使用时,新方法在派生类中替换继承方法,从而破坏多态性。
当派生类调用用“new”声明的方法时,它将执行该新方法,而不管持有对象的引用变量的类型如何。这被认为是早期绑定,并阻碍多态性。
示例
考虑以下代码示例:
<code class="language-csharp">public class Base { public virtual bool DoSomething() { return false; } } public class Derived : Base { public new bool DoSomething() { return true; } }</code>
如果您将 Derived 的实例分配给 Base 类型的变量并调用 DoSomething(),则如果使用 virtual/override,结果将为 false,但如果使用 new,则结果为 true。这突出了后期绑定和早期绑定之间的区别。
以上是虚拟/覆盖与c#中的新事物:我什么时候应该使用哪个关键字进行方法覆盖?的详细内容。更多信息请关注PHP中文网其他相关文章!