class BaseClass
{
public void Method1()
{
Console.WriteLine("Base - Method1");
Method2();
}
public virtual void Method2()
{
Console.WriteLine("Base - Method2");
}
}
class DerivedClass : BaseClass
{
public new void Method2()
{
Console.WriteLine("Derived - Method2");
}
}
DerivedClass dc = new DerivedClass();
dc.Method1();
结果为Base - Method1 Base - Method2
请问为什么得到的结果不是Base - Method1 Derived - Method2?new不是会隐藏基类的成员吗?
只是隐藏,还是会调用的啦,又没消失,你要想用子类的方法实现就去掉new,通过override关键字进行重写即可。
我用.NET Reflector看了IL代码,
在main方法中dc.Method1() IL语句是
callvirt instance void OverrideAndNew1.BaseClass::Method1(),
调用的是BaseClass中Method1(),
在Method1()中Method2()的IL语句是
call instance void OverrideAndNew1.BaseClass::Method2()