当你覆盖一个方法时,你不应该改变这个方法的行为,你只是特化它。因此,您必须在覆盖的方法中调用 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/