c# - 如何在不改变行为的情况下重写虚方法?

标签 c# oop

当你覆盖一个方法时,你不应该改变这个方法的行为,你只是特化它。因此,您必须在覆盖的方法中调用 base.MyVirtualMethod() 并添加特化代码。

但我总是想知道什么时候必须调用 base.MyVirtualMethod()。或者换个角度,我的虚方法怎么写?我是否应该期望用户将它作为重写方法所做的第一件事或最后一件事来调用它?

public class Parent
{
    public virtual void MyMethod(){ /* Some code*/ }
}
public class Child : Parent
{
    public override void MyMethod()
    {
        /* Does my code goes here? */
        base.MyMethod();
        /* Or does my code goes here? */
    }
}

最佳答案

Therefore you have to call base.MyVirtualMethod() in the overridden method and add the specialisation code.

这并不总是正确的 - 在某些情况下,您不想在派生类中执行父类(super class)正在执行的操作,因此您不想调用 base

如果您想扩展基本行为,您可以根据实际问题在 base 调用之前或之后放置代码。没有“总是在你的代码之前调用 base”的规则。

关于c# - 如何在不改变行为的情况下重写虚方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8268215/

相关文章:

c# - 使用 ObjectListView 自定义排序

c# - async await 与 TcpClient 的用法

C# 在文件中搜索字符串并获取字符串的行号

java - 如何使用 Java 反射在 Java 中创建嵌套静态类的新对象

oop - UML 类图中的关系如何继承?

c# - 'base' 和 'this' 在引用父对象字段、属性或方法时有区别吗?

c# - 哪个 C# 定时器?

c# - 确定最大值的有效方法(有或没有偏移)

python - 在 python 中从 __new__() 调用其他类方法

PHP 对象扩展 $this->some_object->method