iT邦幫忙

2026 iThome 鐵人賽

DAY 10
0
自我挑戰組

學習C#續系列 第 10 篇

Day 10:泛型(Generics)

  • 分享至 

  • xImage
  •  

泛型(Generics)與非泛型(Non-Generics)的差異:

  • 非泛型(如 ArrayList、Hashtable):將所有元素當作 object 儲存,缺乏型別檢查,且存取值型別時會產生裝箱(Boxing)與拆箱(Unboxing)開銷。
  • 泛型(如 List、Dictionary<TKey, TValue>):在定義時使用型別參數(Type Parameter,常以 T 表示)作為佔位符,直到使用時才指定具體型別。

為什麼要使用泛型?(三大核心優勢):

  • 型別安全(Type Safety):編譯時期即進行型別檢查,防止將不相容的資料塞入集合,避免執行時期拋出 InvalidCastException。
  • 效能提升(Performance):處理值型別(如 int、struct)時完全避免 Boxing/Unboxing 的記憶體配置與轉型耗損。
  • 程式碼重用性(Code Reusability):同一套演算法或資料結構,無需為每種資料型別重複撰寫多份程式碼。

定義泛型類別(Generic Class):

  • 在類別名稱後方加上角括號 ,例如 public class MyContainer。類別內部的欄位、屬性或方法皆可使用 T 作為型別。

定義泛型方法(Generic Method):

  • 在方法名稱後方加上 ,例如 public void Swap(ref T a, ref T b)。
  • 呼叫泛型方法時,編譯器通常具備型別推導(Type Inference)能力,多數情況下可省略角括號的型別指定。

範例實作
https://ithelp.ithome.com.tw/upload/images/20260923/20178925oUuGNgZFNv.png

https://ithelp.ithome.com.tw/upload/images/20260923/20178925FMFGCR6IYz.png

https://ithelp.ithome.com.tw/upload/images/20260923/20178925N2E91mQ0Mh.png


上一篇
Day 9:介面實作與多型(Interface & Polymorphism)
下一篇
Day 11:System.Collections.Generic 命名空間、索引鍵/值對集合、使用索引的集合、循序存取的集合
系列文
學習C#續 共 21 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言