語言

Windows 商店應用程式在 .NET Framework 中的反射

.NET Framework 包含一組反射型別與成員,供 Windows 8.x 商店應用程式使用。 這些類型與成員可在完整的 .NET Framework 及 .NET for Windows Store 應用程式中取得。 本文說明這些與 .NET Framework 4 及更早版本對應版本的主要差異。

如果你正在建立 Windows 8.x 商店應用程式,必須在 Windows 8.x 商店應用程式中使用 .NET 中的反射類型和成員。 這些類型和成員也可供在傳統型應用程式中使用,但並非必要,因此您可以針對這兩種類型的應用程式使用相同的程序代碼。

TypeInfo 和組件載入

在 Windows 8.x 商店應用程式的 .NET 中,該TypeInfo類別包含部分 .NET Framework 4 Type 類別的功能。 Type物件代表型別定義的參考,而 TypeInfo 物件則代表型別定義本身。 這可讓您操作 Type 物件,而不需要在執行階段載入它們引用的組件。 取得相關聯的 TypeInfo 物件會強制載入組件。

TypeInfo 包含 Type 上許多可用的成員,而 .NET for Windows 8.x 市集應用程式中的許多反射屬性都會傳回 TypeInfo 物件的集合。 若要從 TypeInfo 物件取得 Type 物件,請使用 GetTypeInfo 方法。

查詢方法

在 Windows 8.x 商店的 .NET 應用程式中,你會使用回傳IEnumerable<T>集合的反射屬性,而非回傳陣列的方法。 反射上下文可以對於大型元件或類型實作這些集合的延遲遍歷。

反射特性只會返回特定對象上宣告的方法,而不是遍歷繼承樹狀結構。 此外,它們不會使用 BindingFlags 參數進行篩選。 相反地,篩選會在使用者程式代碼中進行,方法是在傳回的集合上使用LINQ查詢。 對於源自執行階段的反映物件(例如,結果 typeof(Object)),遍歷繼承樹狀結構最佳達成的方法是使用 RuntimeReflectionExtensions 類別的輔助方法。 來自自定義反射上下文的物件使用者無法使用這些方法,必須自行遍歷繼承樹。

限制

在 Windows 8.x 市集應用程式中,某些 .NET Framework 類型和成員的存取受到限制。 例如,您無法使用 MethodInfo 物件來呼叫 Windows 8.x 市集應用程式適用的 .NET 中未包含的 .NET Framework 方法。 此外,某些在 Windows 8.x 市集應用程式的情境中不被視為安全的型別和成員,以及 WindowsRuntimeMarshal 和 Marshal 的成員,也都會遭到封鎖。 此限制只會影響 .NET Framework 類型和成員;您可以像平常一樣呼叫程式代碼或第三方程序代碼。

另請參閱