C# 反射(Reflection)
反射指程序可以訪問、檢測和修改它本身狀態或行爲的一種能力。
程序集包含模塊,而模塊包含類型,類型又包含成員。反射則提供了封裝程序集、模塊和類型的對象。
您可以使用反射動態地創建類型的實例,將類型綁定到現有對象,或從現有對象中獲取類型。然後,可以調用類型的方法或訪問其字段和屬性。
優缺點
優點:
- 1、反射提高了程序的靈活性和擴展性。
- 2、降低耦合性,提高自適應能力。
- 3、它允許程序創建和控制任何類的對象,無需提前硬編碼目標類。
缺點:
- 1、性能問題:使用反射基本上是一種解釋操作,用於字段和方法接入時要遠慢於直接代碼。因此反射機制主要應用在對靈活性和拓展性要求很高的系統框架上,普通程序不建議使用。
- 2、使用反射會模糊程序內部邏輯;程序員希望在源代碼中看到程序的邏輯,反射卻繞過了源代碼的技術,因而會帶來維護的問題,反射代碼比相應的直接代碼更復雜。
反射(Reflection)的用途
反射(Reflection)有下列用途:
- 它允許在運行時查看特性(attribute)信息。
- 它允許審查集合中的各種類型,以及實例化這些類型。
- 它允許延遲綁定的方法和屬性(property)。
- 它允許在運行時創建新類型,然後使用這些類型執行一些任務。
Type類,是一個用來存儲類型的特性和信息的類。對於程序中的每一個類型,都會有他自己的類信息,而根據Type提供的書信和方法獲得這個類型的一切信息,包括字段,屬性,事件,參數,構造函數等。
首先生成Type對象:
Type type = typeof(Test);
Test test= new Test();
Type type2 = test.GetType();
獲取