
定義:審查中繼資料並收集類型資訊的能力。
中繼資料:描述儲存於 CLR 可攜式執行檔(PE)或記憶體中程式的二進位資訊。編譯為 PE 檔時,中繼資料嵌入檔案一部分;程式碼轉為 MSIL 嵌入另一部分。模組或組件中定義/引用的每個類型與成員皆於中繼資料中描述。執行時,執行階段將中繼資料載入記憶體,用於發現類別、成員、繼承等資訊。
System.Reflection 命名空間包含解析中繼資料表的核心類別:
System.Reflection.MemberInfo
System.Reflection.EventInfo
System.Reflection.FieldInfo
System.Reflection.MethodBase
System.Reflection.ConstructorInfo
System.Reflection.MethodInfo
System.Reflection.PropertyInfo
System.Type
System.Reflection.Assembly
| 方法 | 說明 | 建議 |
|---|---|---|
Load | 帶組件識別載入,套用策略,搜尋 GAC、應用程式基目錄、私有路徑 | 極力推薦 |
LoadFrom | 傳檔案路徑載入指定組件,不含版本/文化/金鑰資訊 | 特定場景使用 |
LoadWithPartialName | 無法確定載入版本 | 永遠不要使用,將被淘汰 |

應用程式域 → 組件 → 模組 → 類型 → 成員。反射提供封裝組件、模組、類型的物件。
| 目標 | 使用類別 | 關鍵方法 |
|---|---|---|
| 載入組件、查找類型、建立實例 | Assembly | GetTypes、CreateInstance |
| 了解模組資訊 | Module | GetTypes、GetMethods |
| 建構函式資訊 | ConstructorInfo | GetConstructors、GetConstructor |
| 方法資訊 | MethodInfo | GetMethods、GetMethod、Invoke |
| 欄位資訊與值存取 | FieldInfo | GetFields、GetValue/SetValue |
| 事件資訊與處理器 | EventInfo | AddEventHandler/RemoveEventHandler |
| 屬性資訊與值存取 | PropertyInfo | GetProperties、GetValue/SetValue |
| 參數資訊 | ParameterInfo | GetParameters |
提供在執行時建構類型的特殊反射形式,可動態生成 IL 程式碼。
效能損失來源(由小到大):比較類型 < 遍歷成員 < 調用成員。
優化方案:
MethodInfo、PropertyInfo 等反射物件


透過反射檢查與調用:




執行結果:


總結:反射功能強大但效能代價高,生產環境核心路徑應謹慎使用,善用快取與替代模式平衡靈活度與效能。