首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# new virtual的不解

2013-08-14 
C# new virtual的疑惑public void Program{static void Main(string[] args){B b new C()b.Gun()Conso

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删掉便知
------解决方案--------------------


输出CGUN正是多态的体现。

C类只能是override的B类中的GUN方法。因为B类中只有一个GUN方法,就是其overwrite的A类中的GUN方法。

热点排行