新建和覆盖之间的区别

2023-12-10

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

情况1:基类

public void DoIt();

情况1:继承类

public new void DoIt();

情况2:基类

public virtual void DoIt();

情况2:继承类

public override void DoIt();

根据我运行的测试,情况 1 和 2 似乎具有相同的效果。有什么区别或者首选方式吗?


override 修饰符可用于 虚方法并且必须用于 抽象方法。这表明对于 编译器使用最后定义的 方法的实现。即使 该方法是在引用上调用的 它将使用的基类 实现覆盖它。

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

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

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

将会通知Derived.DoIt如果这覆盖了Base.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

会先打电话Base.DoIt, then Derived.DoIt。它们实际上是两个完全独立的方法,恰好具有相同的名称,而不是派生方法重写基本方法。

Source: 微软博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

新建和覆盖之间的区别 的相关文章

随机推荐