a到底成了什么?
为什么a.aa()调用的是A类里面的aa方法?A a = new B();class A
        {
            public A() { }
            public void aa()
            {
                Console.WriteLine("i'm aa!");
            }
            public virtual void ap()
            {
                Console.WriteLine("i'm A!");
                aa();
            }
        }
        class B : A
        {
            public B() { }
            public override void ap()
            {
                Console.WriteLine("I'M B");
                aa();
            }
            public new void aa()
            {
                Console.WriteLine("i'm bb!");
            }
        }

解决方案 »

  1.   

    public new void aa()
    //使用new定义方法,则是隐藏了基类方法A a = new B();
    //申明一个A的引用,调用的方法如果在子类中用new隐藏的话,会调用基类本身的
      

  2.   

    http://msdn.microsoft.com/zh-cn/library/6fawty39.aspx
      

  3.   

    这是多态的形式
    A a = new B();
    B继承自A,所以A类型的实例可以通过其子类去创建
      

  4.   

    这是亮点
     A a = new B(); 你首先都已经把a定义成A类的对象了
     你可以拆开看设
    A a;
    a = new B();
     A类的对象  显然会调用A的函数!
    new B();
     只是初始化 a而已
      

  5.   

    http://msdn.microsoft.com/zh-cn/library/51y09td4(VS.80).aspx