首页 > 后端开发 > C++ > C#方法覆盖:虚拟/覆盖与新 - 有什么区别?

C#方法覆盖:虚拟/覆盖与新 - 有什么区别?

Barbara Streisand
发布: 2025-01-27 06:26:09
原创
742 人浏览过

C# Method Overriding: Virtual/Override vs. New – What's the Difference?

深入理解 C# 中的方法重写

面向对象编程中,方法重写允许派生类提供其自身对从基类继承的方法的实现。C# 提供两种截然不同的方法重写方式:“virtual” 和 “override” 关键字,或者简单地声明一个具有相同签名的新的方法。

Virtual Override

当方法在基类中声明为 “virtual” 时,它可以使用 “override” 关键字在派生类中被重写。这种方法允许派生类提供其自身的实现,同时保持原始方法签名。在运行时,当对象是派生类型时,即使持有对象的引用变量是基类型,也会调用重写的方法。

New

或者,可以通过声明一个具有相同签名并将其标记为 “new” 的新方法来在派生类中重写方法。这种方法完全替换基类中的实现,并且无论运行时对象的类型如何,都会调用重写的方法。

区别示例

为了说明区别,请考虑以下代码片段:

public class Foo
{
    public virtual bool DoSomething() { return false; }
}

public class Bar : Foo
{
    public override bool DoSomething() { return true; }
}
登录后复制

如果我们如下调用代码:

Foo a = new Bar();
a.DoSomething();
登录后复制

结果将根据用于重写的方法而有所不同:

  • Virtual Override: 运行时将调用派生类 (Bar) 中重写的方法,即使对象存储在 Foo 类型的变量中。
  • New: 将调用派生类 (Bar) 中的新方法,有效地替换基类 (Foo) 中的实现。

主要区别

总而言之,“virtual” “override” 和 “new” 用于方法重写的主要区别在于:

  • 调用: Virtual override 仅在对象的类型与派生类匹配时才允许调用重写的方法,而 new 总是调用新方法,而不管对象的类型如何。
  • 实现: Virtual override 保持原始方法签名并允许派生类提供替代实现,而 new 替换基类中的实现。
  • 用途: Virtual override 更适合多态行为,其中不同的派生类提供其自身的实现,而 new 适用于修改或自定义基类方法。

以上是C#方法覆盖:虚拟/覆盖与新 - 有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

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