Windows app
摺疊目錄
展開目錄
本文章是由人工翻譯。 將指標移到文章內的文字上方即可查看原文。 其他資訊。
譯文
原文
資訊
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.

Reflection in the .NET Framework for Windows Store Apps

.NET Framework 4.5
 

從 .NET Framework 4.5 開始,.NET Framework 包含一組反映類型和成員,以便用於 Windows 8.x 市集 應用程式。這些類型和成員提供於完整 .NET Framework,以及適用於 Windows 市集應用程式的 .NET本文件說明這些與其對應項目在 .NET Framework 4 和舊版之間的主要差異。

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

在 適用於 Windows8.x 市集應用程式的 .NET 中,TypeInfo 類別包含 .NET Framework 4 Type 類別的某些功能。 Type 物件代表類型定義的參考,而 TypeInfo 物件則代表類型定義本身。這可讓您操作 Type 物件,而不一定需要執行階段載入它們所參考的組件。取得相關聯的 TypeInfo 物件會強制載入組件。

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

在 適用於 Windows8.x 市集應用程式的 .NET 中,請使用會傳回 IEnumerable<T> 集合的反映屬性,而不要使用傳回陣列的方法。反映內容可以針對大型組件或類型實作這些集合的消極式周遊。

反映屬性只傳回特定物件上宣告的方法,而不會周遊繼承樹狀結構。此外,它們不會使用 BindingFlags 參數進行篩選。相反地,篩選發生在使用者程式碼中,對傳回的集合使用 LINQ 查詢。對於因執行階段而產生的反映物件 (例如,因為 typeof(Object)),周遊繼承樹狀結構最佳的執行方式是使用 RuntimeReflectionExtensions 類別的 helper 方法。來自自訂反映內容之物件的取用者不能使用這些方法,而且必須自行周遊繼承樹狀結構。

在 Windows 8.x 市集 應用程式中,對於某些 .NET Framework 類型和成員的存取會受到限制。例如,您不能藉由使用 MethodInfo 物件,呼叫未包含在 適用於 Windows8.x 市集應用程式的 .NET 的 .NET Framework 方法。此外,在 Windows 8.x 市集 應用程式的內容中不被視為安全的特定類型和成員會被封鎖,就如同 MarshalWindowsRuntimeMarshal 成員一樣。這項限制只會影響 .NET Framework 類型和成員;您可以如常呼叫您的程式碼或協力廠商程式碼。

此範例使用 適用於 Windows8.x 市集應用程式的 .NET 中的反映類型和成員來擷取 Calendar 類型的方法和屬性,包括繼承的方法和屬性。若要執行此程式碼,請將它貼入 Windows 8.x 市集 頁面的程式碼檔案,該頁面在名為 Reflection 的專案中包含名為 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();

        }
    }
}
顯示:
© 2016 Microsoft