C#通俗易懂談反射(一)

一、反射是什麼意思?

從字面意思來看,反射就是通過一種機制來窺探內部的結構和細節。例如通過雷達反射可以窺探到天空,通過聲吶可以窺探海底等。
在計算機程序中,反射就是一種可以窺探到一個類或程序集內部的結構的一種機制。

那麼問題來了,什麼情況下需要“窺探”?一般情況在對一個隱藏的類或未知的程序集的時候需要得到他們內部的結構。其中包括類型,屬性,方法等等。

有過這樣的經歷,當我們在C#中引用了一個Dll時可以查看到這個Dll內部含有的類,數據類型和方法等,那麼這種過程就是VS利用了反射機制窺探到此DLL內部結構的。這樣便於我們使用它。

通常反射機制在架構中應用的比較多,因爲通過反射可以不用事先知道一個Dll內部的結構。通過一步一步的檢索,來確定它內部具有的的類型、屬性、方法、枚舉、接口、結構等數據。此外我們還可以利用窺探到的信息直接創建對象,即使這個對象的類型在編譯的時候不知道。這樣對於實現動態加載DLL是很有幫助的。具體後期會說。

二、反射的具體功能

1、使用Assmbly 定義和加載程序集,加載在程序集清單中列出模塊,以及從此程序集中查找類型並創建該類型的實例。
2、使用Module瞭解包含模塊的程序集以及模塊的類等,還可以獲取在模塊上定義的所有全局方法或其他特定的非全局方法。
3、使用ConstructorInfo瞭解構造函數的名稱、參數、訪問修飾符(public、private)和實現詳細信息(abstract、virtual)等。
4、使用MethodInfo瞭解方法的名稱、返回類型、參數、訪問修飾符(public、private)和實現詳細信息(abstract、virtual)等。
5、使用FieldInfo瞭解字段的名稱、返回類型、參數、訪問修飾符(public、private)和實現詳細信息(static)等。並獲取或設置字段值。
6、使用EventInfo瞭解事件的名稱、事件處理程序數據類型、自定義屬性、聲明類型和反射類型等,並添加或移除事件處理程序。
7、使用PropertyInfo瞭解屬性的名稱、數據類型、聲明類型、反射類型和只讀或可寫狀態等,獲取或設置屬性值。
8、使用ParameterInfo瞭解參數的名稱、數據類型、是輸入參數還是輸出參數,以及參數在方法簽名中的位置等。

實現反射的具體功能,需要引入命名空間。如下:
System.Reflection

其中包含Type類和Assembly類
使用Type類可以訪問任何給定數據類型的信息,使用Assembly類可以用於訪問給定程序集的信息,或把這個程序集加載到程序中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章