在基类型" virtual"中声明方法然后使用" override"关键字在子类型中覆盖它而不是new在声明子类型中的匹配方法时简单地使用" "关键字之间有什么区别?
考虑以下代码:
class Program
{
static void Main(string[] args)
{
Person person = new Teacher();
person.ShowInfo();
Console.ReadLine();
}
}
public class Person
{
public void ShowInfo()
{
Console.WriteLine("I am Person");
}
}
public class Teacher : Person
{
public new void ShowInfo()
{
Console.WriteLine("I am Teacher");
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,输出以下内容:
我是人
但是,你可以看到它是一个实例Teacher,而不是Person.代码为什么这样做?
我最近得到了以下代码作为一种帮助理解Polymorphism和Inheritance在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!
Run Code Online (Sandbox Code Playgroud)
现在,在与提出拼图的其他开发者进行了长时间的长时间聊天后,我知道输出是什么,但我不会为你破坏它.我真正遇到的唯一问题是我们如何得到输出,代码如何逐步通过,继承什么等等.
我认为C会返回,因为它似乎是定义的类.然后我通过我的脑袋了解是否B会因为C继承而返回B- 但B也继承A(这是我困惑的地方!).
任何人都可以解释多态性和继承如何在检索输出中发挥作用,最终显示在屏幕上?