我有以下类:困惑在C# “覆盖” 与 “新”
class Base
{
public virtual void Print()
{
Console.WriteLine("Base");
}
}
class Der1 : Base
{
public new virtual void Print()
{
Console.WriteLine("Der1");
}
}
class Der2 : Der1
{
public override void Print()
{
Console.WriteLine("Der2");
}
}
这是我的主要方法:
Base b = new Der2();
Der1 d1 = new Der2();
Der2 d2 = new Der2();
b.Print();
d1.Print();
d2.Print();
输出为Base
,Der2
, Der2
。
据我所知,Override不会让以前的方法运行,即使指针指向它们。所以第一行也应输出Der2
。但是Base
出来了。
这怎么可能?覆盖如何在那里不起作用?
真是一个惊人的例子... 唯一的技巧就是在这里 - intially,BASE的方法是通过的“DER-1”的虚方法隐藏的,所以在骑的“方法DER-2 “无法实施。因此,我们获得了BASE的价值。 – Kings 2015-05-07 15:21:05