面向对象编程中,方法重写允许派生类提供其自身对从基类继承的方法的实现。C# 提供两种截然不同的方法重写方式:“virtual” 和 “override” 关键字,或者简单地声明一个具有相同签名的新的方法。
当方法在基类中声明为 “virtual” 时,它可以使用 “override” 关键字在派生类中被重写。这种方法允许派生类提供其自身的实现,同时保持原始方法签名。在运行时,当对象是派生类型时,即使持有对象的引用变量是基类型,也会调用重写的方法。
或者,可以通过声明一个具有相同签名并将其标记为 “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” 和 “new” 用于方法重写的主要区别在于:
以上是C#方法覆盖:虚拟/覆盖与新 - 有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!