上周在項目里面考慮到效果的動態實現,由於之前只知道C#中的反射技術但是沒用過,所以在動態獲取類的屬性成員時候就想不出好的方法來了,最后經過在網上的查詢得到了好的解決方案===>就是使用C#自帶的反射技術來實現;
基礎知識:
- 反射就是在加載程序和運行時,動態獲取和加載程序集,並且可以獲取到程序集的信息;而在程序集中,包含模塊(Module),模塊包含類型,類型包含成員,提供反射,我們可以查看到一個程序集的路徑,命名空間,類。我們可以對其進行操作;可以對程序集的類進行實例化,掉用類中的方法等,就跟我們普通使用程序集一樣;
- Acticator Class:請點擊這里!
- MSDN詳細反射講解:請點擊這里!
反射機制的用途:
-
使用 Assembly 定義和加載程序集,加載在程序集清單中列出的模塊,以及從此程序集中查找類型並創建該類型的實例。
-
使用 Module 發現以下信息:包含模塊的程序集以及模塊中的類等。 您還可以獲取在模塊上定義的所有全局方法或其他特定的非全局方法。
-
使用 ConstructorInfo 發現以下信息:構造函數的名稱、參數、訪問修飾符(如 public 或 private)和實現詳細信息(如 abstract 或 virtual)等。 使用 Type 的 GetConstructors 或 GetConstructor 方法來調用特定的構造函數。
-
使用 MethodInfo 發現以下信息:方法的名稱、返回類型、參數、訪問修飾符(如 public 或 private)和實現詳細信息(如 abstract 或 virtual)等。 使用 Type 的 GetMethods 或 GetMethod 方法來調用特定的方法。
-
使用 FieldInfo 發現以下信息:字段的名稱、訪問修飾符(如 public 或 private)和實現詳細信息(如static)等;並獲取或設置字段值。
-
使用 EventInfo 發現以下信息:事件的名稱、事件處理程序數據類型、自定義特性、聲明類型和反射類型等;並添加或移除事件處理程序。
-
使用 PropertyInfo 發現以下信息:屬性的名稱、數據類型、聲明類型、反射類型和只讀或可寫狀態等;並獲取或設置屬性值。
-
使用 ParameterInfo 發現以下信息:參數的名稱、數據類型、參數是輸入參數還是輸出參數,以及參數在方法簽名中的位置等。
-
當您在一個應用程序域的僅反射上下文中工作時,請使用 CustomAttributeData 來發現有關自定義特性的信息。 通過使用 CustomAttributeData,你不必創建特性的實例就可以檢查它們。
完整測試項目:請點擊這里!
版權聲明:本文為博主原創文章,如需轉載,請標明出處。