首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 多態性核心機制詳解:虛方法、重寫與運行時綁定實戰

     編輯:關於C#

多態是面向對象三大支柱之一 (封裝、繼承、多態)。核心規則:子類對象可作為父類對象使用。當父類引用指向子類對象並調用虛方法時,執行的是子類的重寫實現。

四大知識點

  1. 理解多態性本質
  2. 定義 virtual 虛方法
  3. 使用 override 重寫虛方法
  4. 程序中運用多態 (父類數組/集合存儲子類對象)

基類:定義虛方法

public class DrawingObject {
    public virtual void Draw() {
        Console.WriteLine("I'm just a generic drawing object.");
    }
}

virtual 允許派生類重寫。基類提供預設實現。

派生類:重寫虛方法

public class Line : DrawingObject {
    public override void Draw() { Console.WriteLine("I'm a Line."); }
}
public class Circle : DrawingObject {
    public override void Draw() { Console.WriteLine("I'm a Circle."); }
}
public class Square : DrawingObject {
    public override void Draw() { Console.WriteLine("I'm a Square."); }
}

override 確保運行時替換基類實現。若無 virtual 則為隱藏 (new),不構成多態。

多態實戰:父類數組存儲子類對象

public class DrawDemo {
    public static int Main() {
        DrawingObject[] dObj = new DrawingObject[4];
        dObj[0] = new Line();
        dObj[1] = new Circle();
        dObj[2] = new Square();
        dObj[3] = new DrawingObject(); // 基類實例

        foreach (DrawingObject obj in dObj) {
            obj.Draw(); // 運行時動態綁定
        }
        return 0;
    }
}

輸出結果

I'm a Line.
I'm a Circle.
I'm a Square.
I'm just a generic drawing object.

核心解析

  • 數組類型為 DrawingObject[],但元素實際類型各異。
  • foreach 遍歷時,編譯時綁定的是 DrawingObject.Draw,但運行時根據對象實際類型分發到 Line.Draw、Circle.Draw 等。
  • 這就是 運行時多態 (動態綁定):同一調用指令,不同對象表現不同行為。
  • 最後一個元素是基類實例,故執行基類虛方法預設實現。

總結

多態讓代碼對擴展開放 (新增形狀類無需修改 DrawDemo),對修改關閉。虛方法與重寫是實現多態的語法基石。設計模式中 策略模式、模板方法模式 等均建立在此機制之上。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved