前言
多型是物件導向三大支柱之一(封裝、繼承、多型)。C# 透過虛擬方法、覆寫、抽象類別/介面實現執行期多型。本文為總覽篇,連結三篇深度文章。
一、多型核心定義
多型允許用戶端對統一介面發出呼叫,具體執行哪個實作、如何執行,由執行期根據物件實際型別決定。
兩種多型
| 類型 | 綁定時機 | C# 實現機制 | 範例 |
| 靜態多型(編譯期) | 編譯期 | 方法多載、泛型、擴充方法 | Print(int) vs Print(string) |
| 動態多型(執行期) | 執行期 | 虛擬方法覆寫、抽象方法實作、介面實作 | animal.Speak() → 狗吠/貓叫 |
二、C# 實現動態多型的三大支柱
1. 虛擬方法
- 關鍵字:
virtual(基類)、override(衍生類)
- 提供預設實作,衍生類可選擇性覆寫
- 詳細請見:《C# 虛擬方法完整解析》
2. 覆寫虛擬方法
- 簽章必須完全一致:名稱、回傳型別、參數
- 強制
override,禁止 new/static/virtual
- 基類參考指向衍生類實例 → 動態綁定
- 詳細請見:《C# 衍生類別覆寫虛擬方法完整指南》
3. 抽象類別
- 關鍵字:
abstract class、abstract method
- 無法實例化,僅供繼承
- 強制衍生類實作所有抽象成員(除非衍生類也是抽象)
- 詳細請見:《C# 抽象類別完整解析》
三、三者關係圖解
+------------------+ 繼承 +------------------+
| 抽象類別 | ─────────────> | 具體類別 |
| (abstract class)| | (concrete) |
| | 實作抽象方法 | |
| abstract void | | override void |
| Speak(); | | Speak() { ... } |
+------------------+ +------------------+
^ |
| 虛擬方法覆寫 |
| virtual void Speak() { ... } |
| override void Speak() { ... } |
+-------------------------------------+
四、介面:多型的純粹契約
- 介面定義只有簽章、無實作的契約
- 類別實作介面 = 承諾提供所有成員實作
- 多型最高形式:介面參考指向實作實例
- 支援多重實作(一類別實作多介面)
五、多型實戰優勢
- 開放封閉原則 (OCP):對擴充開放,對修改關閉。新增衍生類無需修改用戶端代碼
- 依賴倒置 (DIP):高層模組依賴抽象(介面/抽象類),不依賴具體實作
- 測試便利性:可注入 Mock/Stub 實作介面/抽象類
- 外掛架構:動態載入實作介面的組件
六、總結導航
| 主題 | 核心關鍵字 | 適用場景 | 深度文章 |
| 虛擬方法 | virtual/override | 有預設實作、可選擇性覆寫 | 《C# 虛擬方法完整解析》 |
| 覆寫規則 | override 簽章一致性 | 衍生類自訂行為 | 《C# 衍生類別覆寫虛擬方法》 |
| 抽象類別 | abstract class/method | 強制實作、無預設實作、不可實例化 | 《C# 抽象類別完整解析》 |
| 介面 | interface | 純契約、多重實作、解耦 | (建議補充介面專文) |
掌握虛擬方法、覆寫、抽象類別三大支柱,即掌握了 C# 動態多型的完整體系。
- 上一篇文章: C# 衍生類別覆寫虛擬方法完整指南:簽章一致性、override 強制、多型實作範例
- 下一篇文章: C# 抽象類別完整解析:abstract 修飾符、強制實作規則、與介面差異、Vehicle 範例重構
Copyright ©
程式碼之家 All Rights Reserved