虚拟方法调用使用对象的实际类型来确定调用哪个方法,而非虚拟方法使用引用的类型。
说你有:
public class Parent {
public void NonVirtualPrint() {}
public virtual void VirtualPrint() {}
}
public class Kid : Parent {
public new void NonVirtualPrint() {}
override public void VirtualPrint() {}
}
然后:
Parent p = new Parent();
Parent x = new Kid();
Kid k = new Kid();
p.NonVirtualPrint(); // calls the method in Parent
p.VirtualPrint(); // calls the method in Parent
x.NonVirtualPrint(); // calls the method in Parent
x.VirtualPrint(); // calls the method in Kid
k.NonVirtualPrint(); // calls the method in Kid
k.VirtualPrint(); // calls the method in Kid