Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais

Reflection in the .NET Framework for Windows Store Apps

.NET Framework (current version)
 

Depuis .NET Framework 4.5, .NET Framework fournit un ensemble de types et membres de réflexion à utiliser dans les applications du Windows 8.x Store. Ces types et membres sont disponibles dans le .NET Framework complet et dans .NET pour les applications du Windows Store. Ce document explique les principales différences entre ceux-là et leurs équivalents dans .NET Framework 4 et les versions antérieures.

Si vous créez une application du Windows 8.x Store, vous devez utiliser les types et membres de réflexion dans .NET pour les applications Windows 8.x Store. 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.

Dans .NET pour les applications Windows 8.x Store, la classe TypeInfo contient certaines fonctionnalités de la classe Type de .NET Framework 4. 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. Cela vous permet de manipuler des objets Type sans obliger le runtime à charger l'assembly qu'ils référencent. L'obtention de l'objet TypeInfo associé force le chargement de l'assembly.

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 retournent des collections d'objets TypeInfo. Pour obtenir un objet TypeInfo à partir d'un objet Type, utilisez la méthode GetTypeInfo.

Dans .NET pour les applications Windows 8.x Store, utilisez les propriétés de réflexion qui retournent des collections IEnumerable<T> au lieu de méthodes qui retournent des tableaux. Les contextes de réflexion peuvent implémenter le parcours différé de ces collections pour de grands assemblys ou 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. De plus, elles n'utilisent pas de paramètres BindingFlags pour le filtrage. Le filtrage s'effectue dans le code utilisateur, en utilisant des requêtes LINQ sur les collections retournées. 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. 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.

Dans une application du Windows 8.x Store, l'accès à certains types et membres de .NET Framework est restreint. 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, à l'aide d'un objet MethodInfo. 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 Store sont bloqués, comme le sont les membres Marshal et WindowsRuntimeMarshal. Cette restriction concerne uniquement les types et membres de .NET Framework. Vous pouvez appeler votre code ou un code tiers de façon habituelle.

Cet exemple utilise les types et membres de réflexion dans .NET pour les applications Windows 8.x Store 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. Pour exécuter ce code, collez-le dans le fichier de code d'une page Windows 8.x Store qui contient un contrôle Windows.UI.Xaml.Controls.Textblock nommé textblock1 dans un projet 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.

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

        }
    }
}
Afficher: