想知道以下之间有什么区别:
情况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(使用前将#替换为@)