给个小模型或者解释带了virtual在用法上有什么区别,不要说什么动态地址,static,会往父类上层找。

图片说明
建个小模型解释下最好。

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,有什么好处?
这是因为,基类可以写好算法框架,让派生类的实现去自定义替换掉一些代码,实现不同的逻辑。
如果在派生类定义的方法不能被执行,还是执行的基类的,那么就没法自定义了。