想知道以下内容之间有什么区别:
情况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/