首页 > 后端开发 > C++ > 虚拟/覆盖与c#中的新事物:我什么时候应该使用哪个关键字进行方法覆盖?

虚拟/覆盖与c#中的新事物:我什么时候应该使用哪个关键字进行方法覆盖?

Linda Hamilton
发布: 2025-01-27 06:36:09
原创
432 人浏览过

Virtual/Override vs. New in C#: When Should I Use Which Keyword for Method Overriding?

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中文网其他相关文章!

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