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