反射

提供封裝程序集、模塊和類型的對象

反射徠是一種計算機處理方式。有程序可以訪問、檢測和修改它本身狀態或行為的這種能力。能提供封裝程序集、類型的對象。(程序集包含模塊,而模塊包含類型,類型又包含成員。)

目錄

簡介


用途
您可以使用反射動態地創建類型的實例,將類型綁定到現有對象,或從現有對象中獲取類型。然後,可以調用類型的方法或訪問其欄位和屬性。
1.使用 Assembly 定義和載入程序集,載入在程序集清單中列出的模塊,以及從此程序集中查找類型並創建該類型的實例。
2.使用 Module 了解如下的類似信息:包含模塊的程序集以及模塊中的類等。您還可以獲取在模塊上定義的所有全局方法或其他特定的非全局方法。
3.使用 ConstructorInfo 了解如下的類似信息:構造函數的名稱、參數、訪問修飾符(如 public 或 private)和實現詳細信息(如 abstract 或 virtual)等。
4.使用 Type 的 GetConstructors 或 GetConstructor 方法來調用特定的構造函數。
5.使用 MethodInfo 來了解如下的類似信息:方法的名稱、返回類型、參數、訪問修飾符(如 public 或 private)和實現詳細信 息(如 abstract 或 virtual)等。使用 Type 的 GetMethods 或 GetMethod 方法來調用特定的方法。
6.使用 FieldInfo 來了解如下的類似信息:欄位的名稱、訪問修飾符(如 public 或 private)和實現詳細信息(如 static)等;並獲取或設置欄位值。
7.使用 EventInfo 來了解如下的類似信息:事件的名稱、事件處理程序數據類型、自定義屬性、聲明類型和反射類型等;並添加或移除事件處理程序。
8.使用 PropertyInfo 來了解如下的類似信息:屬性的名稱、數據類型、聲明類型、反射類型和只讀或可寫狀態等;並獲取或設置屬性值。
徠9.使用 ParameterInfo 來了解如下的類似信息:參數的名稱、數據類型、參數是輸入參數還是輸出參數,以及參數在方法簽名中的位置等。
優點:
1、反射提高了程序的靈活性和擴展性。
2、降低耦合性,提高自適應能力。
3、它允許程序創建和控制任何類的對象,無需提前硬編碼目標類。
缺點:
1、性能問題:使用反射基本上是一種解釋操作,用於欄位和方法接入時要遠慢於直接代碼。因此反射機制主要應用在對靈活性和拓展性要求很高的系統框架上,普通程序不建議使用。
2、使用反射會模糊程序內部邏輯;程序員希望在源代碼中看到程序的邏輯,反射卻繞過了源代碼的技術,因而會帶來維護的問題,反射代碼比相應的直接代碼更複雜。