Réflexion dans le .NET Framework pour les applications Windows StoreReflection in the .NET Framework for Windows Store Apps

À compter de .NET Framework 4.5, le .NET Framework fournit un ensemble de types et membres de réflexion à utiliser dans les applications du Windows 8.x StoreWindows 8.x Store.Starting with the .NET Framework 4.5, the .NET Framework includes a set of reflection types and members for use in Windows 8.x StoreWindows 8.x Store apps. Ces types et membres sont disponibles dans le .NET Framework complet et dans .NET pour les applications du Windows Store.These types and members are available in the full .NET Framework as well as in the .NET for Windows Store apps. Ce document explique les principales différences entre ceux-là et leurs équivalents dans .NET Framework 4 et les versions antérieures.This document explains the major differences between these and their counterparts in the .NET Framework 4 and earlier versions.

Si vous créez une application du Windows 8.x StoreWindows 8.x Store, vous devez utiliser les types et membres de réflexion dans .NET pour les applications Windows 8.x Store.NET for Windows 8.x Store apps.If you are creating a Windows 8.x StoreWindows 8.x Store app, you must use the reflection types and members in the .NET pour les applications Windows 8.x Store.NET for Windows 8.x Store apps. Ces types et membres étant également disponibles, mais pas obligatoires, pour les applications de bureau, il est possible d'utiliser le même code pour les deux types d'applications.These types and members are also available, but not required, for use in desktop apps, so you can use the same code for both types of apps.

TypeInfo et chargement des assemblysTypeInfo and Assembly Loading

Dans .NET pour les applications Windows 8.x Store.NET for Windows 8.x Store apps, la classe TypeInfo contient certaines fonctionnalités de la classe Type de .NET Framework 4.In the .NET pour les applications Windows 8.x Store.NET for Windows 8.x Store apps, the TypeInfo class contains some of the functionality of the .NET Framework 4 Type class. Un objet Type représente une référence à la définition d'un type, tandis qu'un objet TypeInfo représente la définition de ce type.A Type object represents a reference to a type definition, whereas a TypeInfo object represents the type definition itself. Cela vous permet de manipuler des objets Type sans obliger le runtime à charger l'assembly qu'ils référencent.This enables you to manipulate Type objects without necessarily requiring the runtime to load the assembly they reference. L'obtention de l'objet TypeInfo associé force le chargement de l'assembly.Getting the associated TypeInfo object forces the assembly to load.

TypeInfo contient bon nombre des membres disponibles sur Type, et de nombreuses propriétés de réflexion de .NET pour les applications Windows 8.x Store.NET for Windows 8.x Store apps retournent des collections d'objets TypeInfo.TypeInfo contains many of the members available on Type, and many of the reflection properties in the .NET pour les applications Windows 8.x Store.NET for Windows 8.x Store apps return collections of TypeInfo objects. Pour obtenir un objet TypeInfo à partir d'un objet Type, utilisez la méthode GetTypeInfo.To get a TypeInfo object from a Type object, use the GetTypeInfo method.

Méthodes de requêteQuery Methods

Dans .NET pour les applications Windows 8.x Store.NET for Windows 8.x Store apps, utilisez les propriétés de réflexion qui retournent des collections IEnumerable<T> au lieu de méthodes qui retournent des tableaux.In the .NET pour les applications Windows 8.x Store.NET for Windows 8.x Store apps, you use the reflection properties that return IEnumerable<T> collections instead of methods that return arrays. Les contextes de réflexion peuvent implémenter le parcours différé de ces collections pour de grands assemblys ou types.Reflection contexts can implement lazy traversal of these collections for large assemblies or types.

Les propriétés de réflexion retournent uniquement les méthodes déclarées sur un objet particulier au lieu de parcourir l'arborescence d'héritage.The reflection properties return only the declared methods on a particular object instead of traversing the inheritance tree. De plus, elles n'utilisent pas de paramètres BindingFlags pour le filtrage.Moreover, they do not use BindingFlags parameters for filtering. Le filtrage s'effectue dans le code utilisateur, en utilisant des requêtes LINQ sur les collections retournées.Instead, filtering takes place in user code, by using LINQ queries on the returned collections. Pour les objets réflexion provenant du runtime (par exemple, les résultats de typeof(Object)), il est plus efficace de parcourir l'arborescence d'héritage en utilisant les méthodes d'assistance de la classe RuntimeReflectionExtensions.For reflection objects that originate with the runtime (for example, as the result of typeof(Object)), traversing the inheritance tree is best accomplished by using the helper methods of the RuntimeReflectionExtensions class. Les consommateurs des objets provenant de contextes de réflexion personnalisés ne peuvent pas utiliser ces méthodes, et doivent parcourir l'arborescence d'héritage eux-mêmes.Consumers of objects from customized reflection contexts cannot use these methods, and must traverse the inheritance tree themselves.

RestrictionsRestrictions

Dans une application du Windows 8.x StoreWindows 8.x Store, l'accès à certains types et membres de .NET Framework est restreint.In a Windows 8.x StoreWindows 8.x Store app, access to some .NET Framework types and members is restricted. Par exemple, vous ne pouvez pas appeler les méthodes .NET Framework qui ne sont pas incluses dans .NET pour les applications Windows 8.x Store.NET for Windows 8.x Store apps, à l'aide d'un objet MethodInfo.For example, you cannot call .NET Framework methods that are not included in .NET pour les applications Windows 8.x Store.NET for Windows 8.x Store apps, by using a MethodInfo object. En outre, certains types et membres qui ne sont pas considérés comme sécurisés dans le contexte d'une application du Windows 8.x StoreWindows 8.x Store sont bloqués, comme le sont les membres Marshal et WindowsRuntimeMarshal.In addition, certain types and members that are not considered safe within the context of a Windows 8.x StoreWindows 8.x Store app are blocked, as are Marshal and WindowsRuntimeMarshal members. Cette restriction concerne uniquement les types et membres de .NET Framework. Vous pouvez appeler votre code ou un code tiers de façon habituelle.This restriction affects only .NET Framework types and members; you can call your code or third-party code as you normally would.

ExempleExample

Cet exemple utilise les types et membres de réflexion dans .NET pour les applications Windows 8.x Store.NET for Windows 8.x Store apps pour récupérer les méthodes et propriétés du type Calendar, y compris les méthodes et propriétés héritées.This example uses the reflection types and members in the .NET pour les applications Windows 8.x Store.NET for Windows 8.x Store apps to retrieve the methods and properties of the Calendar type, including inherited methods and properties. Pour exécuter ce code, collez-le dans le fichier de code d’une page Windows 8.x StoreWindows 8.x Store qui contient un contrôle Windows.UI.Xaml.Controls.TextBlock nommé textblock1 dans un projet Reflection.To run this code, paste it into the code file for a Windows 8.x StoreWindows 8.x Store page that contains a Windows.UI.Xaml.Controls.TextBlock control named textblock1 in a project named Reflection. Si vous collez ce code dans un projet avec un nom différent, veillez à modifier le nom de l'espace de noms pour refléter celui du projet.If you paste this code inside a project with a different name, just make sure you change the namespace name to match your project.

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
Imports System

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

Voir aussiSee also