假如在基类中有一个virtual void A()方法,在派生类中使用new void A()和override void A()有什么区别,谢谢

解决方案 »

  1.   

    有区别的,我写了个测试程序:
    using System;namespace Override
    {
    class Base 
    {
    public virtual void A()
    {
    Console.WriteLine("Base class virtual method A()");
    }
    }
    class Derived1 : Base
    {
    public new void A()
    {
    Console.WriteLine("Derived1 class new method A()");
    }
    }
    class Derived2 : Base
    {
    public override void A()
    {
    Console.WriteLine("Derived2 class override method A()");
    } }
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    class Class1
    {
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
    //
    // TODO: 在此处添加代码以启动应用程序
    //
    Base b = new Base();
    Derived1 b1 = new Derived1();
    Derived2 b2 = new Derived2();
    b.A();
    b1.A();
    b2.A(); Console.WriteLine(); b = b1;
    b.A(); b = b2;
    b.A();
    }
    }
    }输出结果如下:
    Base class virtual method A()
    Derived1 class new method A()
    Derived2 class override method A()Base class virtual method A()
    Derived2 class override method A()
    Press any key to continue由此可见:new是完全覆盖基类的成员函数,在运行时与基类的虚函数没有任何关系,new只是声明了在派生类中的一个重名函数而已
    而override是重写基类的函数,在运行时可绑定到派生类的override方法,执行派生类的方法