Exportieren (0) Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Reflektion in .NET Framework für Windows Store-Apps

.NET Framework 4.5

Ab .NET Framework 4.5 stellt .NET Framework eine Reihe von Reflektionstypen und -membern für Windows Store-Apps zur Verfügung. Diese Typen und Member sind im vollständigen .NET Framework sowie im .NET für Windows Store-Apps verfügbar. In diesem Dokument werden die Hauptunterschiede zwischen ihnen und ihren Entsprechungen in .NET Framework 4 und früheren Versionen erklärt.

Wenn Sie eine Windows Store-App erstellen, müssen Sie die Reflektionstypen und -member im .NET für Windows Store-Apps verwenden. Diese Typen und Member sind ebenfalls für die Verwendung in Desktop-Apps verfügbar, jedoch nicht erforderlich, sodass Sie denselben Code für beide Typen von Apps verwenden können.

In .NET für Windows Store-Apps enthält die TypeInfo-Klasse einen Teil der Funktionen der Type-Klasse von .NET Framework 4. Ein Type-Objekt stellt einen Verweis auf eine Typdefinition dar, während ein TypeInfo-Objekt die Typdefinition selbst darstellt. Dadurch können Sie Type-Objekte ändern, ohne dass die Laufzeit unbedingt die Assembly laden muss, auf die sie verweisen. Das Abrufen des zugeordneten TypeInfo-Objekts erzwingt das Laden der Assembly.

TypeInfo enthält viele der Member, die in Type verfügbar sind, und viele der Reflektionseigenschaften in .NET für Windows Store-Apps geben Auflistungen von TypeInfo-Objekten zurück. Um ein TypeInfo-Objekt aus einem Type-Objekt abzurufen, verwenden Sie die GetTypeInfo-Methode.

Verwenden Sie in .NET für Windows Store-Apps die Reflektionseigenschaften, die IEnumerable<T>-Auflistungen zurückgeben, anstelle von Methoden, die Arrays zurückgeben. Reflektionskontexte können einen verzögerten Durchlauf dieser Auflistungen für große Assemblys oder Typen implementieren.

Die Reflektionseigenschaften geben nur die deklarierten Methoden für ein bestimmtes Objekt wieder. Sie durchlaufen nicht die Vererbungsstruktur. Darüber hinaus verwenden sie keine BindingFlags-Parameter zum Filtern. Stattdessen wird das Filtern im Benutzercode ausgeführt, indem LINQ-Abfragen für die zurückgegebenen Auflistungen verwendet werden. Für Reflektionsobjekte, die mit der Laufzeit ausgelöst werden (z. B. als Ergebnis von typeof(Object)), wird das Durchlaufen der Vererbungsstruktur am besten erreicht, indem die Hilfsmethoden der RuntimeReflectionExtensions-Klasse verwendet werden. Consumer von Objekten benutzerdefinierter Reflektionskontexte können diese Methoden nicht verwenden und müssen selbst die Vererbungsstruktur durchlaufen.

In einer Windows Store-App wird der Zugriff auf einige .NET Framework-Typen und -Member eingeschränkt. Sie können beispielsweise .NET Framework-Methoden, die nicht in .NET für Windows Store-Apps enthalten sind, nicht mit einem MethodInfo-Objekt aufrufen. Darüber hinaus werden bestimmte Typen und Member, die innerhalb einer Windows Store-App als nicht sicher eingestuft werden, sowie Marshal-Member und WindowsRuntimeMarshal-Member blockiert. Diese Einschränkung betrifft nur .NET Framework-Typen und -Member. Sie können Ihren Code oder Code von Drittanbietern wie gewohnt aufrufen.

In diesem Beispiel werden die Reflektionstypen und -member in .NET für Windows Store-Apps verwendet, um die Methoden und Eigenschaften des Calendar-Typs abzurufen (einschließlich geerbter Methoden und Eigenschaften). Um diesen Code auszuführen, fügen Sie ihn in eine Codedatei für eine Windows Store-Seite ein, die ein Windows.UI.Xaml.Controls.Textblock-Steuerelement mit dem Namen textblock1 enthält.


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();

        }
    }
}


Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft