C#多態

來源:互聯網
上載者:User

標籤:

本文在於鞏固基礎

首先看看MSDN 的敘述:

多態性常被視為自封裝和繼承之後,物件導向的編程的第三個支柱。 Polymorphism(多態性)是一個希臘詞,指“多種形態”,多態性具有兩個截然不同的方面:

  • 在運行時,在方法參數和集合或數組等位置,衍生類別的對象可以作為基類的對象處理。 發生此情況時,該對象的宣告類型不再與運行時類型相同。

  • 基類可以定義並實現虛方法,衍生類別可以重寫這些方法,即衍生類別提供自己的定義和實現。 在運行時,用戶端代碼調用該方法,CLR 尋找對象的運行時類型,並調用虛方法的重寫方法。 因此,你可以在原始碼中調用基類的方法,但執行該方法的衍生類別版本。

虛方法允許你以統一方式處理多組相關的對象。 例如,假定你有一個繪圖應用程式,允許使用者在繪圖圖面上建立各種形狀。 你在編譯時間不知道使用者將建立哪些特定類型的形狀。但應用程式必須跟蹤建立的所有類型的形狀,並且必須更新這些形狀以響應使用者滑鼠操作。 你可以使用多態性通過兩個基本步驟解決這一問題:

  1. 建立一個類階層,其中每個特定形狀類均派生自一個公用基類。

  2. 使用虛方法通過對基類方法的單個調用來調用任何衍生類別上的相應方法。

 

多態概述

當衍生類別從基類繼承時,它會獲得基類的所有方法、欄位、屬性和事件。物件導向的語言使用虛方法表達多態。若要更改基類的資料和行為,您有兩種選擇:可以使用新的派產生員替換基成員,或者可以重寫虛擬基成員。

 

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#多態

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.