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

情况1:基类

public void DoIt();

情况1:继承的类
public new void DoIt();

情况2:基类
public virtual void DoIt();

情况2:继承的类
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

如果覆盖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,然后调用Derived.DoIt。实际上,它们是两个完全独立的方法,它们恰好具有相同的名称,而不是派生的方法覆盖基本方法。

资料来源:Microsoft blog

关于c# - 新和替代之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1399127/

10-11 19:15