public class Base
  {
    public void abc()
   {
  Console.WriteLine("In base");
    }
  }   public class Driver : Base
   {
       public new void abc()
       {
           Console.WriteLine("In driver");
       }
   }
上面两个类,
            Base f = new Base();
            f.abc();
            Base f2 = new Driver();
            f2.abc();
            Driver f1 = new Driver();
            f1.abc();
            Console.ReadKey(true);
           
输出结果是 In base
          In base
          In driver第二个 结果是 In base 不是太明白 为啥不是In driver

解决方案 »

  1.   

    我把  public class Driver : Base
      {
      public new void abc()
      {
      Console.WriteLine("In driver");
      }
      }  new 改成 override后 输出的是 In driver
      

  2.   

    override就是派生类重写(覆盖)基类的方法
    new就是派生类自己完全独立的方法,无视(隐藏)基类的方法
      

  3.   

    通过override重写基类的方法,就是面向对象的多态性的最典型的实现方式
      

  4.   


    abc不是一个虚方法,你把子类Up Cast成基类去调用abc,当然输出时In base
    当父类的abc加上virtual关键字,子类abc new改成override,这就是一个虚方法了,输出就是In driver楼主对于多态的理解和virtual/override/new这些关键字的理解需要加强
      

  5.   

    完全明白了  谢谢 关键是 Base f2 = new Driver(); 这写法我没见过VB.net 好像没这写法吧