new和 override之间的差异是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (45)

想知道以下几点之间有什么区别:

案例1:基类

public void DoIt();

案例1:继承类

public new void DoIt();

案例2:基类

public virtual void DoIt();

Case 2: Inherited class

public override void DoIt();

根据我所运行的测试,案例1和2似乎都有相同的效果。有什么不同吗,还是首选的方法?

提问于
用户回答回答于

可以:

public class Base
{
    public virtual void DoIt()
    {
    }
}

public class Derived : Base
{
    public override void DoIt()
    {
    }
}

Base b = new Derived();
b.DoIt();                      // Calls Derived.DoIt

然后

public class Base
{
    public virtual void DoIt()
    {
    }
}

public class Derived : Base
{
    public new void DoIt()
    {
    }
}

Base b = new Derived();
Derived d = new Derived();

b.DoIt();                      // Calls Base.DoIt
d.DoIt();                      // Calls Derived.DoIt

用户回答回答于

virtual:指示方法可能被继承者覆盖。

override::重写基类中的虚拟方法的功能,提供不同的功能。

new生皮最初的方法(不一定是虚拟的)提供了不同的功能。

隐藏方法时,仍然可以通过向上转换到基类来访问原始方法。

扫码关注云+社区