C#中Override关键字和New关键字的用法详解

2019-12-30 11:35:14丽君

 


    public static void TestCars2()
    {
      System.Console.WriteLine("nTestCars2");
      System.Console.WriteLine("----------");

      var cars = new List<Car> { new Car(), new ConvertibleCar(), 
        new Minivan() };

      foreach (var car in cars)
      {
        car.DescribeCar();
        System.Console.WriteLine("----------");
      }
    }

输出:


TestCars2
----------
Four wheels and an engine.
Standard transportation.
----------
Four wheels and an engine.
Standard transportation.
----------
Four wheels and an engine.
Carries seven people.
----------

 


    public static void TestCars3()
    {
      System.Console.WriteLine("nTestCars3");
      System.Console.WriteLine("----------");
      ConvertibleCar car2 = new ConvertibleCar();
      Minivan car3 = new Minivan();
      car2.ShowDetails();
      car3.ShowDetails();
    }

输出:       


TestCars3
----------
A roof that opens up.
Carries seven people.

 


    public static void TestCars4()
    {
      System.Console.WriteLine("nTestCars4");
      System.Console.WriteLine("----------");
      Car car2 = new ConvertibleCar();
      Car car3 = new Minivan();
      car2.ShowDetails();
      car3.ShowDetails();
    }
    // Output:
    // TestCars4
    // ----------
    // Standard transportation.
    // Carries seven people.
  }



  // Define the base class, Car. The class defines two virtual methods,
  // DescribeCar and ShowDetails. DescribeCar calls ShowDetails, and each derived
  // class also defines a ShowDetails method. The example tests which version of
  // ShowDetails is used, the base class method or the derived class method.
  class Car
  {
    public virtual void DescribeCar()
    {
      System.Console.WriteLine("Four wheels and an engine.");
      ShowDetails();
    }

    public virtual void ShowDetails()
    {
      System.Console.WriteLine("Standard transportation.");
    }
  }


  // Define the derived classes.

  // Class ConvertibleCar uses the new modifier to acknowledge that ShowDetails
  // hides the base class method.
  class ConvertibleCar : Car
  {
    public new void ShowDetails()
    {
      System.Console.WriteLine("A roof that opens up.");
    }
  }

  // Class Minivan uses the override modifier to specify that ShowDetails
  // extends the base class method.
  class Minivan : Car
  {
    public override void ShowDetails()
    {
      System.Console.WriteLine("Carries seven people.");
    }
  }

}