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

C# 4.0 新特性探秘 (二):dynamic 與 var、反射的比較與限制

     編輯:關於C語言

dynamic vs var

特性vardynamic
本質編譯期型別推斷運行期動態綁定
適用位置僅區域變數欄位、參數、返回值、泛型參數
初始化必須同時初始化可延遲賦值
型別變更不可(推斷後固定)可任意賦值不同型別
IntelliSense完整支援無靜態分析支援

dynamic vs 反射

調用 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(); // 程式碼極度簡化

dynamic 限制

  • 屬性存取不支援:嘗試 d.set_Blog(...) / d.get_Blog() 拋出例外,找不到方法。
  • 索引屬性 (有參屬性) 不支援。
  • 無法存取私有成員:反射可繞過可見性,dynamic 僅限公開介面。
  • 無法取得型別中繼資料:反射可檢查型別結構,dynamic 僅能調用。

適用場景:Interop (COM、IronPython、JSON 解析)、極度簡化反射代碼的特定場合。

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