Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中的多态性。解释输出_C# - Fatal编程技术网

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()
方法