Udostępnij za pośrednictwem


Odbicia w .NET Framework dla aplikacji sklepu Windows Store

Począwszy od programu .NET Framework 4.5, program .NET Framework zawiera zestaw typów odbicia i elementów członkowskich do użycia w aplikacjach ze Sklepu Windows 8.x. Te typy i elementy członkowskie są dostępne w pełnym programie .NET Framework, a także w aplikacjach .NET dla Sklepu Windows. W tym dokumencie wyjaśniono główne różnice między tymi i ich odpowiednikami w programie .NET Framework 4 i starszych wersjach.

Jeśli tworzysz aplikację ze Sklepu Windows 8.x, musisz użyć typów odbicia i elementów członkowskich na platformie .NET dla aplikacji ze Sklepu Windows 8.x. Te typy i elementy członkowskie są również dostępne, ale nie są wymagane do użycia w aplikacjach klasycznych, dzięki czemu można użyć tego samego kodu dla obu typów aplikacji.

Klasa TypeInfo i ładowanie zestawu

W aplikacjach TypeInfo .NET for Windows 8.x Store klasa zawiera niektóre funkcje klasy .NET Framework 4 Type . Type Obiekt reprezentuje odwołanie do definicji typu, natomiast TypeInfo obiekt reprezentuje samą definicję typu. Dzięki temu można manipulować Type obiektami bez konieczności wymagania, aby środowisko uruchomieniowe załadowało zestaw, do którego się odwołuje. Pobranie skojarzonego TypeInfo obiektu wymusza załadowanie zestawu.

TypeInfo zawiera wiele elementów członkowskich dostępnych w systemie Typei wiele właściwości odbicia na platformie .NET dla aplikacji ze Sklepu Windows 8.x zwraca kolekcje TypeInfo obiektów. Aby uzyskać TypeInfo obiekt z Type obiektu, użyj GetTypeInfo metody .

Metody zapytań

W aplikacjach .NET for Windows 8.x Store należy użyć właściwości odbicia, które zwracają IEnumerable<T> kolekcje zamiast metod zwracanych tablic. konteksty Emocje ion mogą implementować leniwe przechodzenie tych kolekcji dla dużych zestawów lub typów.

Właściwości odbicia zwracają tylko zadeklarowane metody dla określonego obiektu zamiast przechodzić przez drzewo dziedziczenia. Ponadto nie używają BindingFlags parametrów do filtrowania. Zamiast tego filtrowanie odbywa się w kodzie użytkownika przy użyciu zapytań LINQ w zwracanych kolekcjach. W przypadku obiektów odbicia, które pochodzą ze środowiska uruchomieniowego (na przykład w wyniku typeof(Object)), przechodzenie drzewa dziedziczenia najlepiej jest osiągnąć przy użyciu metod RuntimeReflectionExtensions pomocnika klasy. Konsumenci obiektów z dostosowanych kontekstów odbicia nie mogą używać tych metod i muszą przejść przez drzewo dziedziczenia.

Ograniczenia

W aplikacji ze Sklepu Windows 8.x dostęp do niektórych typów i członków programu .NET Framework jest ograniczony. Na przykład nie można wywołać metod programu .NET Framework, które nie są uwzględnione na platformie .NET dla aplikacji ze Sklepu MethodInfo Windows 8.x przy użyciu obiektu. Ponadto niektóre typy i elementy członkowskie, które nie są uważane za bezpieczne w kontekście aplikacji ze Sklepu Windows 8.x, są blokowane, podobnie jak i MarshalWindowsRuntimeMarshal członkowie. To ograniczenie dotyczy tylko typów i członków programu .NET Framework; Możesz wywołać kod lub kod innej firmy, tak jak zwykle.

Przykład

W tym przykładzie użyto typów odbicia i elementów członkowskich w aplikacjach ze sklepu .NET dla systemu Windows 8.x, aby pobrać metody i właściwości Calendar typu, w tym metody dziedziczone i właściwości. Aby uruchomić ten kod, wklej go do pliku kodu dla strony Sklepu Windows 8.x zawierającej kontrolkę Windows.UI.Xaml.Controls.TextBlock o nazwie w projekcie o nazwie textblock1 Emocje ion. Jeśli wklejasz ten kod w projekcie o innej nazwie, po prostu zmień nazwę przestrzeni nazw, aby pasować do projektu.

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();
        }
    }
}
Imports Windows.UI.Xaml.Navigation
Imports System.Reflection
Imports System.Globalization
Imports System.Text

Public NotInheritable Class MainPage
    Inherits Page

    Protected Overrides Sub OnNavigatedTo(e As NavigationEventArgs)
        Dim t As TypeInfo = GetType(Calendar).GetTypeInfo()
        Dim pList As IEnumerable(Of PropertyInfo) = t.DeclaredProperties
        Dim mList As IEnumerable(Of MethodInfo) = t.DeclaredMethods

        Dim sb As New StringBuilder()

        sb.Append("Properties:")
        For Each p As PropertyInfo In pList

            sb.Append((vbLf + p.DeclaringType.Name & ": ") + p.Name)
        Next
        sb.Append(vbLf & "Methods:")
        For Each m As MethodInfo In mList
            sb.Append((vbLf + m.DeclaringType.Name & ": ") + m.Name)
        Next

        textblock1.Text = sb.ToString()

    End Sub
End Class

Zobacz też