首页 新闻 会员 周边

C# 修饰符new

0
悬赏园豆:200 [已解决问题] 解决于 2018-09-09 16:21

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不是会隐藏基类的成员吗?

hj0612的主页 hj0612 | 初学一级 | 园豆:24
提问于:2018-09-09 01:40
< >
分享
最佳答案
0

只是隐藏,还是会调用的啦,又没消失,你要想用子类的方法实现就去掉new,通过override关键字进行重写即可。

收获园豆:200
Jeffcky | 老鸟四级 |园豆:2789 | 2018-09-09 11:45
其他回答(1)
0

我用.NET Reflector看了IL代码,
在main方法中dc.Method1() IL语句是
callvirt instance void OverrideAndNew1.BaseClass::Method1(),
调用的是BaseClass中Method1(),
在Method1()中Method2()的IL语句是
call instance void OverrideAndNew1.BaseClass::Method2()

hj0612 | 园豆:24 (初学一级) | 2018-09-09 16:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册