最近,为我提供了以下代码,作为一种难题,以帮助理解OOP-C#中的多态性和继承。
// No compiling!
public class A
{
public virtual string GetName()
{
return "A";
}
}
public class B:A
{
public override string GetName()
{
return "B";
}
}
public class C:B
{
public new string GetName()
{
return "C";
}
}
void Main()
{
A instance = new C();
Console.WriteLine(instance.GetName());
}
// No compiling!
现在,在与提出该难题的其他开发人员进行了长时间的聊天之后,我知道了输出的内容,但是我不会为您带来麻烦。我真正遇到的唯一问题是我们如何获得该输出,代码如何逐步执行,继承什么内容等等。
我以为C
会返回,因为这似乎是已定义的类。然后我想知道是否B
会因为C继承而返回B
-但B
也继承了A
(这让我感到困惑!)。
题:
谁能解释多态性和继承性在检索最终显示在屏幕上的输出中如何发挥作用?