標籤:
本文在於鞏固基礎
首先看看MSDN 的敘述:
多態性常被視為自封裝和繼承之後,物件導向的編程的第三個支柱。 Polymorphism(多態性)是一個希臘詞,指“多種形態”,多態性具有兩個截然不同的方面:
虛方法允許你以統一方式處理多組相關的對象。 例如,假定你有一個繪圖應用程式,允許使用者在繪圖圖面上建立各種形狀。 你在編譯時間不知道使用者將建立哪些特定類型的形狀。但應用程式必須跟蹤建立的所有類型的形狀,並且必須更新這些形狀以響應使用者滑鼠操作。 你可以使用多態性通過兩個基本步驟解決這一問題:
建立一個類階層,其中每個特定形狀類均派生自一個公用基類。
使用虛方法通過對基類方法的單個調用來調用任何衍生類別上的相應方法。
多態概述:
當衍生類別從基類繼承時,它會獲得基類的所有方法、欄位、屬性和事件。物件導向的語言使用虛方法表達多態。若要更改基類的資料和行為,您有兩種選擇:可以使用新的派產生員替換基成員,或者可以重寫虛擬基成員。
public class Shape{ // A few example members public int X { get; private set; } public int Y { get; private set; } public int Height { get; set; } public int Width { get; set; } // Virtual method public virtual void Draw() { Console.WriteLine("Performing base class drawing tasks"); }}class Circle : Shape{ public override void Draw() { // Code to draw a circle... Console.WriteLine("Drawing a circle"); base.Draw(); }}class Rectangle : Shape{ public override void Draw() { // Code to draw a rectangle... Console.WriteLine("Drawing a rectangle"); base.Draw(); }}class Triangle : Shape{ public override void Draw() { // Code to draw a triangle... Console.WriteLine("Drawing a triangle"); base.Draw(); }}class Program{ static void Main(string[] args) { // Polymorphism at work #1: a Rectangle, Triangle and Circle // can all be used whereever a Shape is expected. No cast is // required because an implicit conversion exists from a derived // class to its base class. System.Collections.Generic.List<Shape> shapes = new System.Collections.Generic.List<Shape>(); shapes.Add(new Rectangle()); shapes.Add(new Triangle()); shapes.Add(new Circle()); // Polymorphism at work #2: the virtual method Draw is // invoked on each of the derived classes, not the base class. foreach (Shape s in shapes) { s.Draw(); } // Keep the console open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); }}/* Output: Drawing a rectangle Performing base class drawing tasks Drawing a triangle Performing base class drawing tasks Drawing a circle Performing base class drawing tasks */
C#多態