C# 教程
反射指程序可以訪問、檢測和修改它本身狀態(tài)或行為的一種能力。
程序集包含模塊,而模塊包含類型,類型又包含成員。反射則提供了封裝程序集、模塊和類型的對象。
您可以使用反射動(dòng)態(tài)地創(chuàng)建類型的實(shí)例,將類型綁定到現(xiàn)有對象,或從現(xiàn)有對象中獲取類型。然后,可以調(diào)用類型的方法或訪問其字段和屬性。
優(yōu)點(diǎn):
缺點(diǎn):
反射(Reflection)有下列用途:
我們已經(jīng)在上面的章節(jié)中提到過,使用反射(Reflection)可以查看特性(attribute)信息。
System.Reflection 類的 MemberInfo 對象需要被初始化,用于發(fā)現(xiàn)與類相關(guān)的特性(attribute)。為了做到這點(diǎn),您可以定義目標(biāo)類的一個(gè)對象,如下:
System.Reflection.MemberInfo info = typeof(MyClass);
下面的程序演示了這點(diǎn):
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會顯示附加到類 MyClass 上的自定義特性:
HelpAttribute
在本實(shí)例中,我們將使用在上一章中創(chuàng)建的 DeBugInfo 特性,并使用反射(Reflection)來讀取 Rectangle 類中的元數(shù)據(jù)。
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會產(chǎn)生下列結(jié)果:
Length: 4.5 Width: 7.5 Area: 33.75 Bug No: 49 Developer: Nuha Ali Last Reviewed: 10/10/2012 Remarks: Unused variable Bug No: 45 Developer: Zara Ali Last Reviewed: 12/8/2012 Remarks: Return type mismatch Bug No: 55, for Method: GetArea Developer: Zara Ali Last Reviewed: 19/10/2012 Remarks: Return type mismatch Bug No: 56, for Method: Display Developer: Zara Ali Last Reviewed: 19/10/2012 Remarks: