| 特性 | var | dynamic |
|---|---|---|
| 本質 | 編譯期型別推斷 | 運行期動態綁定 |
| 適用位置 | 僅區域變數 | 欄位、參數、返回值、泛型參數 |
| 初始化 | 必須同時初始化 | 可延遲賦值 |
| 型別變更 | 不可(推斷後固定) | 可任意賦值不同型別 |
| IntelliSense | 完整支援 | 無靜態分析支援 |
調用 Me.GetName() 對比:
// 反射
Assembly a = Assembly.GetExecutingAssembly();
object inst = a.CreateInstance("Me");
MethodInfo mi = inst.GetType().GetMethod("GetName");
object result = mi.Invoke(inst, null);
// dynamic
dynamic d = new Me();
string result = d.GetName(); // 程式碼極度簡化
d.set_Blog(...) / d.get_Blog() 拋出例外,找不到方法。適用場景:Interop (COM、IronPython、JSON 解析)、極度簡化反射代碼的特定場合。