建个小模型解释下最好。
virtual是虚拟方法,派生类可以重写它,不加上virtual,派生类不能用override重写
class A
{
public virtual void f() { Console.WriteLine("A"); }
}
class B : A
{
public override void f() { Console.WriteLine("B"); }
}
那么
A a = new B();
a.f(); 输出B
如果是
class A
{
public void f() { Console.WriteLine("A"); }
}
class B : A
{
public void f() { Console.WriteLine("B"); }
}
相同的调用则输出A
那么为什么要输出B,有什么好处?
这是因为,基类可以写好算法框架,让派生类的实现去自定义替换掉一些代码,实现不同的逻辑。
如果在派生类定义的方法不能被执行,还是执行的基类的,那么就没法自定义了。