public class A : IDisposable
{
protected virtual void Write()
{
Console.WriteLine("Write A");
} public virtual void F()
{
this.Write();
}
}public class B : A
{
protected override void Write()
{
Console.WriteLine("Write B");
}
}
B b=new B();
b.F();当B里的Write是override时,输出Write B
当B里的Write是new时,输出Write A
这是为什么?大概知道是多态性的原因,请详细解释一下。
------------
因为Write在B中重新了基类的Write,所以调用B.F时,F会调用新的Write。
当B里的Write是new时,输出Write A
----------------------
很显示啊,没有override关键字,因此没有重新基类的方法,所以F只会调用基类的方法。
override: A中F方法调用A中的Write(),而此时A中的Write()已经被B中的write重写了,所以输出B,
new: A中F方法调用A中的Write(),此时A去查找他的write方法在子类中有没有被重写,此时new表明B中的方法是覆盖父类的方法,并没有重写故输出A
new隐藏基类的方法,那么基类的方法和当前类的方法同时存在只是被隐藏了;