【发布时间】:2011-02-26 12:42:12
【问题描述】:
我正在上以下课程:
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出来了。
这怎么可能?覆盖如何在那里不起作用?
【问题讨论】:
-
Really An Amazing example... 这里唯一的技巧是:- 最初,BASE 的方法被“Der-1”的虚拟方法隐藏,因此覆盖“Der-2”的方法" 无法实施。因此,我们得到了 BASE 的值。
标签: c# virtual overriding new-operator