C#的一个缺陷:不能隔代override

    技术2022-05-11  52

    看代码

     

    using  System; using  System.Collections.Generic; using  System.Text; namespace  ConsoleApplication4 {    class Program    {        static void Main(string[] args)        {            A a = new C();            a.foo();            B b = new C();            b.foo();            Console.ReadKey();        }    }    class A    {        public virtual void foo()        {            Console.WriteLine("A");        }    }    class B : A    {        new virtual public void foo()        {            Console.WriteLine("B");        }    }    class C : B    {        override public void foo()        {            Console.WriteLine("C");        }    }}

     

    输出是

    A

    C

    由于B使用了new关键字,使得B的foo不再是A的override。所以当调用a.foo(); 时, 无法调用到C的foo. 


    最新回复(0)