virtual new override
代码:
public abstract class A
{
public A()
{
Console.WriteLine('A');
}
public virtual void Fun()
{
Console.WriteLine("A.Fun()");
}
}
public class B: A
{
public B()
{
Console.WriteLine('B');
}
public new void Fun()
{
Console.WriteLine("B.Fun()");
}
public static void Main()
{
A a = new B();
a.Fun();
}
}
public class C: A
{
public C()
{
Console.WriteLine('C');
}
public override void Fun()
{
Console.WriteLine("C.Fun()");
}
public static void Main()
{
A a = new B();
a.Fun();
a=new C();
a.Fun();
}
}
执行结果:
A
B
A.Fun()
A
C
C.Fun()
从结果可以看到new关键字修饰的方法没有被执行,而执行了基类的方法。这是为什么啊?不是说new会隐藏基类方法吗
而override却执行了本类的方法
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
new 是保留基类方法的前提下新的方法
overwrite 是彻底覆盖基类方法
B a = new B();
a.Fun();
就是 "B.Fun()" 了.

浙公网安备 33010602011771号