我最近收到了下面这段代码,作为一种谜题,帮助我理解OOP-C#中的Polymorphism和Inheritance.
// 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!
现在,在与提出这个谜题的其他开发人员进行了长时间的交谈之后,我知道输出是什么,但我不会为您 destruct 它.我真正遇到的唯一问题是我们如何获得输出,代码如何逐步完成,继承了什么,等等.
我认为会返回C
,因为这似乎是定义的类.然后我想了想是否会返回B
,因为C继承了B
-但B
也继承了A
(这就是我感到困惑的地方!)
问题:
有人能解释一下多态性和继承如何在检索最终显示在屏幕上的输出中发挥作用吗?