日期:2014-05-17  浏览次数:20682 次

C# new virtual的疑惑
public void Program
  {
        static void Main(string[] args)
        {
            B b = new C();
            b.Gun();

            Console.Read();
        }
    }

    class A
    {
        public void Fun()
        {

        }

        public virtual void Gun()
        {
            Console.WriteLine("AGUN");
        }
    }

    class B:A
    {

        public new virtual void Gun()
        {
            Console.WriteLine("BGUN");
        }
    }

    class C : B
    {
        public override void Gun()
        {
            Console.WriteLine("CGUN");
        }
    }

为什么屏幕输出的是CGUN呢?我以为是BGun呢。这里C类覆盖的是A类的虚方法Gun么。如果想要覆盖B类的Gun如何写呢?谢谢大家

------解决方案--------------------
自找麻烦,无意义的设计。

B直接:
public virtual void GunB()
就好了,

C里就可以用Gun()和GunB()区别。






------解决方案--------------------
C重写B的虚函数。 将B中virtual删掉便知
------解决方案--------------------