反射指程序可以訪問、檢測和修改它本身狀态或行為的一種能力。
程序集包含模塊,而模塊包含類型,類型又包含成員。反射則提供了封裝程序集、模塊和類型的對象。
您可以使用反射動态地創建類型的實例,将類型綁定到現有對象,或從現有對象中獲取類型。然後,可以調用類型的方法或訪問其字段和屬性。
優缺點
優點:
1、反射提高了程序的靈活性和擴展性。
2、降低耦合性,提高自适應能力。
3、它允許程序創建和控制任何類的對象,無需提前硬編碼目标類。
缺點:
1、性能問題:使用反射基本上是一種解釋操作,用于字段和方法接入時要遠慢于直接代碼。因此反射機制主要應用在對靈活性和拓展性要求很高的系統框架上,普通程序不建議使用。
2、使用反射會模糊程序内部邏輯;程序員希望在源代碼中看到程序的邏輯,反射卻繞過了源代碼的技術,因而會帶來維護的問題,反射代碼比相應的直接代碼更複雜。
它允許在運行時查看屬性(attribute)信息。
它允許審查集合中的各種類型,以及實例化這些類型。
它允許延遲綁定的方法和屬性(property)。
它允許在運行時創建新類型,然後使用這些類型執行一些任務。
查看元數據
我們已經在上面的章節中提到過,使用反射(Reflection)可以查看屬性(attribute)信息。
System.Reflection 類的 MemberInfo 對象需要被初始化,用于發現與類相關的屬性(attribute)。為了做到這點,您可以定義目标類的一個對象,如下:
System.Reflection.MemberInfo info = typeof(MyClass);
下面的程序演示了這點:
using System;
當上面的代碼被編譯和執行時,它會顯示附加到類 MyClass 上的自定義屬性:
HelpAttribute
實例
在本實例中,我們将使用在上一章中創建的 DeBugInfo 屬性,并使用反射(Reflection)來讀取 Rectangle 類中的元數據。
using System;
當上面的代碼被編譯和執行時,它會産生下列結果:
Length: 4.5
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!