我有以下類:困惑在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