Недавно я получил следующий фрагмент кода как своего рода головоломку, чтобы помочь понять Polymorphism
и Inheritance
в OOP - С#.
// 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
(где я запутался!).
Вопрос:
Может ли кто-нибудь объяснить, как полиморфизм и наследование играют свою роль в извлечении вывода, в конечном счете отображаемом на экране?