本文介绍了新建和覆盖的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Wondering what the difference is between the following:

案例 1:基类

public void DoIt();

案例一:继承类

public new void DoIt();

案例 2:基类

public virtual void DoIt();

案例2:继承类

public override void DoIt();

根据我运行的测试,案例 1 和案例 2 似乎具有相同的效果.有什么区别,或者更喜欢的方式吗?

Both case 1 and 2 appear to have the same effect based on the tests I have run. Is there a difference, or a preferred way?

推荐答案

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.

will call Derived.DoIt if that overrides 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,然后是 Derived.DoIt.它们实际上是两个完全独立的方法,它们碰巧具有相同的名称,而不是派生方法覆盖基方法.

Will first call Base.DoIt, then Derived.DoIt. They're effectively two entirely separate methods which happen to have the same name, rather than the derived method overriding the base method.

来源:微软博客

这篇关于新建和覆盖的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-12 12:48