【发布时间】:2011-10-24 12:26:50
【问题描述】:
如果不使用override和virtual,效果一样,为什么还要使用override和virtual?
示例 1:
class BaseClass
{
public virtual string call()
{
return "A";
}
}
class DerivedClass : BaseClass
{
public override string call()
{
return "B";
}
}
输出:B
示例 2:
class BaseClass
{
public string call()
{
return "A";
}
}
class DerivedClass : BaseClass
{
public string call()
{
return "B";
}
}
输出还是一样的:
输出:B
运行测试:
class Program
{
static void Main(string[] args)
{
DerivedClass dc = new DerivedClass();
Console.WriteLine(dc.call());
Console.ReadKey();
}
}
编译器会在编译时自动添加 virtual 和 override 吗?
如果有人向我解释使用 virtual 和 override 的原因,我会很高兴。
【问题讨论】:
-
如果你可以在调用 add 之前将derivedClass 转为基类,你会得到不同的结果:1 => 2 and 2 => 1
-
@CD.. 没有重复,关于“覆盖和虚拟”
-
发布示例...编译后真的会好很多。
-
@VuralAcar:虽然问题略有不同,但原理是一样的。您只是误解了多态性和方法隐藏之间的区别。
-
您的测试(显然)没有证明差异。将行更改为“BaseClass dc = new DerivedClass();”然后再试一次。现在有区别了吗?
标签: c#