2011-03-05 53 views
6

例如,在ASP.NET中,我們可以反思AppDomain中的程序集,或者使用我們可以獲取有關類的元數據(道具,方法等)的類型。在Silverlight中用於提取類的元數據,提取依賴項屬性等的技術是什麼?Silverlight reflection

回答

5

反射存在於Silverlight中,並在完整的.NET Framework中提供了一部分API。

一個顯着的區別是你不能反映到Silverlight中的私有成員(或者你可以在你自己的程序集中,但邊界應該變得很快)。這是一個安全功能,可以確保您不會混淆框架本身的內部。

除此之外(固然很大)的限制,Reflection應該基本相同。

+0

您可以反思私人成員,但不能修改或調用它們。我曾嘗試爲FieldInfo調用GetValue,但無法調用SetValue,它會引發異常。 – 2011-03-17 03:22:23

4

除了奧斯汀所說的之外,Silverlight中的Reflection規則是您只能通過反射訪問任何您可以通過正常代碼訪問的內容。所以這不僅僅是私人成員。您只能在類本身或任何繼承它的類中反射受保護的成員。

有許多缺少API的作品,但在一般的大多數事情應該是可能的,即使他們需要多一點的工作比在完整的.NET

0

安全注意事項的反思 反射提供了獲取信息的能力關於類型和成員,以及訪問成員。在Silverlight中,您可以使用反射來執行以下任務:

枚舉類型和成員,並檢查其元數據。

枚舉和檢查組件和模塊。

訪問公共成員。

在調用代碼的程序集中訪問內部成員(Visual Basic中的朋友成員)。 (在反思中,這被稱爲彙編級訪問。)

在Silverlight中,您不能使用反射來訪問私有類型和成員。如果類型或成員的訪問級別會阻止您在靜態編譯的代碼中訪問它,則不能通過使用反射來動態訪問它。