本文章是由機器翻譯。 將指標移到文章內的文字上方即可查看原文。 其他資訊。
譯文
原文
資訊
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.

適用於 Windows 市集應用程式之 .NET Framework 中的反映

.NET Framework 4.5

從 .NET Framework 4.5開始, .NET Framework 包括一組反映型別和成員來使用 Windows 市集 應用程式。 這些型別和成員可行於完整的 .NET Framework 以及 適用於 Windows 市集應用程式的 .NET 本文說明這些和它們在 .NET Framework 4 和舊版的對應項目之間的主要差異。

如果您建立 Windows 市集 應用程式,您必須在 適用於 Windows 市集應用程式的 .NET使用反映型別和成員。 這些型別和成員也可在傳統型應用程式中使用(但不是必用),因此您可以對兩種型別的應用程式中使用相同的程式碼。

在 適用於 Windows 市集應用程式的 .NET中, TypeInfo 類別包含某些 .NET Framework 4 Type 類別的功能。 Type 物件表示為型別定義的參考,而 TypeInfo 物件本身則表示型別定義。 這可讓您管理 Type 物件,而不必要求在執行階段中載入它們參考的組件。 取得關聯的 TypeInfo 物件強制組件載入。

TypeInfo 包含可用於 Type的成員,而且許多 適用於 Windows 市集應用程式的 .NET 的反映屬性傳回 TypeInfo 集合物件。 要從 Type 物件取得 TypeInfo 物件,請使用 GetTypeInfo 方法。

在 適用於 Windows 市集應用程式的 .NET中,您使用傳回 IEnumerable<T> 集合的反映屬性來取代傳回陣列的方法。 反映內容可以對大型組件或型別,實作這些集合的延遲周遊。

反映屬性只傳回特定物件的宣告方法,而非周遊於繼承樹狀結構中。 此外,它們無法在篩選中使用 BindingFlags 參數。 不過,在傳回的集合中使用LINQ 查詢,篩選會發生於使用者程式碼。 對於產生於執行階段的反映物件 ( 例如typeof(Object)的結果)而言,周遊繼承樹狀結構最好是由 RuntimeReflectionExtensions 類別的 Helper 方法來完成。 從自訂反映內容的物件消費者不使用這些方法,而且必須周遊繼承樹狀結構本身。

在 Windows 市集 應用程式,對某些 .NET Framework 型別與成員的存取受到限制。 舉例而言,您在使用 MethodInfo 物件時,不能呼叫 不在適用於 Windows 市集應用程式的 .NET內的 .NET Framework 方法。 此外,某些不被 Windows 市集 應用程式內容視為安全的型別和成員皆被封鎖,例如 MarshalWindowsRuntimeMarshal 成員。 這項限制只影響 .NET Framework 型別和其成員;您可以像平常一樣呼叫您的程式碼或協力廠商程式碼。

這個範例使用反映型別以及 適用於 Windows 市集應用程式的 .NET的成員,以擷取Calendar型別的方法與屬性,包括繼承方法和屬性。 若要執行這個程式碼,請將其貼入至Windows 市集頁面的程式碼檔案,其頁面包含名為textblock1Windows.UI.Xaml.Controls.Textblock控制項。


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Navigation;
using System.Reflection;
using System.Globalization;
using System.Text;


namespace Reflection
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
           this.InitializeComponent();
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            TypeInfo t = typeof(Calendar).GetTypeInfo();
            IEnumerable<PropertyInfo> pList = t.DeclaredProperties;
            IEnumerable<MethodInfo> mList = t.DeclaredMethods;

            StringBuilder sb = new StringBuilder();

            sb.Append("Properties:");
            foreach (PropertyInfo p in pList)
            {

                sb.Append("\n" + p.DeclaringType.Name + ": " + p.Name);
            }
            sb.Append("\nMethods:");
            foreach (MethodInfo m in mList)
            {
                sb.Append("\n" + m.DeclaringType.Name + ": " + m.Name);
            }

            textblock1.Text = sb.ToString();

        }
    }
}


社群新增項目

顯示:
© 2015 Microsoft