摘要:[C#] 瞭解使用 Override 和 New 關鍵字的時機 (C# 程式設計手冊)
C#
// Define the base class class Car { public virtual void DescribeCar() { System.Console.WriteLine("Four wheels and an engine."); } } // Define the derived classes class ConvertibleCar : Car { public new virtual void DescribeCar() { base.DescribeCar(); System.Console.WriteLine("A roof that opens up."); } } class Minivan : Car { public override void DescribeCar() { base.DescribeCar(); System.Console.WriteLine("Carries seven people."); } }
public static void TestCars1()
{
Car car1 = new Car();
car1.DescribeCar();
System.Console.WriteLine("----------");
ConvertibleCar car2 = new ConvertibleCar();
car2.DescribeCar();
System.Console.WriteLine("----------");
Minivan car3 = new Minivan();
car3.DescribeCar();
System.Console.WriteLine("----------");
}
執行結果
預期的輸出即如下:
Four wheels and an engine.
----------
Four wheels and an engine.
A roof that opens up.
----------
Four wheels and an engine.
Carries seven people.
----------
但若宣告衍生自 Car 基底類別的物件陣列。這個陣列可以存放 Car、ConvertibleCar 和 Minivan 物件。陣列宣告如下:
C#
public static void TestCars2() { Car[] cars = new Car[3]; cars[0] = new Car(); cars[1] = new ConvertibleCar(); cars[2] = new Minivan(); }
接著可以使用 foreach 迴圈探尋陣列中所包含的每一個 Car 物件,並呼叫 DescribeCar 方法,如下所示:
foreach (Car vehicle in cars) { System.Console.WriteLine("Car object: " + vehicle.GetType()); vehicle.DescribeCar(); System.Console.WriteLine("----------"); }
這個迴圈的輸出如下:
Car object: YourApplication.Car
Four wheels and an engine.
----------
Car object: YourApplication.ConvertibleCar
Four wheels and an engine.
----------
Car object: YourApplication.Minivan
Four wheels and an engine.
Carries seven people.
請注意,ConvertibleCar 的描述和預期的不同。由於這個方法是使用 new 關鍵字所定義的,因此不會呼叫衍生類別方法,而是呼叫基底類別方法。Minivan 物件則是會正確呼叫覆寫方法,產生預期的結果。
文章轉自: http://msdn.microsoft.com/zh-tw/library/ms173153(VS.80).aspx