C#中的多态性。解释输出
我希望在这个程序中输出C#中的多态性。解释输出,c#,C#,我希望在这个程序中输出C。但真正的结果是A 请解释为什么程序会打印A class A { public virtual void say() { Console.WriteLine ("A"); } } class B : A { public new virtual void say() { Console.WriteLine ("B"); } } class C : B { public o
C
。但真正的结果是A
请解释为什么程序会打印
A
class A
{
public virtual void say()
{
Console.WriteLine ("A");
}
}
class B : A
{
public new virtual void say()
{
Console.WriteLine ("B");
}
}
class C : B
{
public override void say()
{
Console.WriteLine ("C");
}
}
class MainClass
{
public static void Main (string[] args)
{
A a = new C ();
a.say();
}
}
您没有重写类B中的say方法,它是类C的子类
public new virtual void say()
在上面的一行中,您隐藏了say方法 这是因为您在类B
中创建了虚拟方法say()
此新方法隐藏了原始方法A.say()
,因此在类C
中重写了此新方法B.say()
,而不是A.say()
既然您将对象声明为A
A a = new C ();
调用旧的A.say()
方法