TUTORIEL TECHNOS .NET 
Le mécanisme de réflexion au sein de C#
Offrant aux programmes des outils d'introspection au sein de leurs propres méthodes, la réflexion est implémentée dans .NET de telle sorte que le développeur puisse la maîtriser sans en subir la complexité. (23/03/2005)
Théorie
On peut définir la réflexion comme le fait de récupérer les attributs d'un objet ou de sa classe de manière dynamique.

Ces attributs sont des métadonnées, stockées dans l'assemblage d'une application, se rapportant aux éléments du code, et permettent de préciser les relations au sein du code. Ainsi, les attributs forment des informations sur ces éléments, informations utilisables par le développeur, comme une description ou un usage préférable. .NET met ainsi à disposition nombre d'attributs standards, mais il est possible d'en créer d'autres.
Outre le développeur, le CLR (Common Language Runtime, le coeur de .NET) lui-même peut profiter de ces attributs à l'exécution même du programme, ce qui lui permettra d'agir, à partir de ces informations, sur les agissements des éléments "marqués". Enfin, le troisième utilisateur potentiel de ces attributs est le compilateur lui-même, qui peut par leur biais recevoir des instructions de compilation spécifiques.
En définitive, ces attributs permettent aux développeurs d'utiliser le langage de la manière la plus efficace pour eux, et en quelque sorte de l'améliorer sans réellement y toucher.

Ces attributs peuvent donc être lus et modifiés pendant l'exécution de l'application, via le mécanisme nommé "réflexion". Ce mécanisme permet au programme de travailler sur lui-même, et d'en savoir plus au sujet des classes utilisées. De fait, c'est une fonctionnalité assez puissante, avec la complexité qui va avec : manipuler dynamiquement les éléments internes d'un programme ne peut pas être fait à la légère, mais autorise des utilisations très élaborées du langage comme de .NET : analyser les capacités des classes, accéder à certaines méthodes, invoquer de nouvelles méthodes...

En pratique
Avec C#, les informations contenues dans les métadonnées sont accessibles via les méthodes des classes proposées par l'espace de nom System.Reflection, auquel s'ajoute la classe System.Type. L'API de réflexion propose de nombreuses manières de lancer la réflexion sur un objet ou une méthode. Par exemple, l'objet Type propose les méthodes pe, GetProperties, GetMethods, GetConstructors, GetInterface...
De leur côté, les classes offertes par System.Reflection permettent de cibler précisément ce sur quoi le développeur veut agir : Assembly, AssemblyFileVersionAttribute, ConstructorInfo, ManifestResourceInfo...
En fait, à chaque type d'élément d'un assemblage correspond une classe de réflexion, ce qui autorise des actions très détaillées sur les éléments du code.

  Forum

Réagissez dans les forums de JDN Développeurs

L'exemple canonique du mécanisme de réflexion reste la récupération des attributs d'un type, au moyen de la classe System.Type. Le programme suivant n'a pas d'autres fonctions que d'afficher dans la console ses propres attributs, ce qui montre combien, malgré la complexité de la réflexion, son usage au sein de .NET a été grandement facilité.

using System;
using System.Reflection;

class TestReflexion {
  public static void Main() {
    foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies() ) {
      if (asm.GetName().Name != "mscorlib") {
          foreach (Type ty in asm.pes() ) {
          Console.WriteLine("Classe : " + ty);
          foreach (MethodInfo mi in ty.GetMethods() ) {
            Console.WriteLine(" Méthode   : " + mi);
            foreach (ParameterInfo pi in mi.GetParameters() )
              Console.WriteLine(" Paramètre : " + pi.pe() );
            }
          }
        }
      }
    }
  }
 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page
 
 





Quand achetez-vous le plus en ligne ?
Du lundi au vendredi
Le samedi
Le dimanche

Tous les sondages