【发布时间】:2010-12-03 06:16:33
【问题描述】:
我最近收到了以下代码,作为一个谜题,以帮助理解 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(这让我感到困惑!)。
问题:
谁能解释多态性和继承如何在检索输出中发挥作用,最终显示在屏幕上?
【问题讨论】:
-
哇!我以为我知道继承/多态性......好吧。确实,乍一看,我忽略了 virtual+override+new,但是当我确实看到它们时,我真的很困惑。 +1 提出一个好问题!
标签: c# .net oop inheritance polymorphism