C # Réflexion

C # Réflexion
Comme son nom l'indique, la réflexion est quelque chose qui donne une image d'information sur quelque chose. Dans C #, une réflexion est un espace de noms bien connu que l'on trouve dans la bibliothèque «système» pour voir les métadonnées sur les classes, les méthodes, les paramètres ou les types. Il contient beaucoup de classes et d'attributs pour obtenir différentes informations concernant les aspects du code. Nous avons donc décidé d'effectuer des exemples très simples pour développer l'utilisation de l'espace de noms de réflexion avec ses attributs. Commençons par la création de fichiers C #.

Exemple # 01:

En passant par le premier exemple, nous examinerons l'élaboration de l'utilisation du «système.Réflexion »Classe pour trouver des informations sur les métadonnées concernant différents types, méthodes ou champs. Nous avons donc commencé ce code avec l'utilisation de la bibliothèque système, et après cela, nous avons utilisé le «système.Classe de réflexion »dans le code. Nous avons commencé un test d'espace de noms et un test de classe à l'intérieur.

Ce test de classe contient une seule fonction, «main ()» qui sera notre fonction de pilote pour ce code. La fonction main () a été démarrée avec le mot clé «Type», chargeant un type «T1» d'une chaîne via la fonction «typeof ()» de la classe système. Le «type» est venu de la classe de réflexion. Maintenant, la même procédure a été utilisée pour charger le type de T2 et T3 d'un entier et d'un caractère, respectivement. Comme nous le savons, la classe de réflexion a proposé de nombreux attributs de métadonnées pour découvrir les informations concernant les types, les méthodes et les champs.

Nous utiliserons donc ces attributs de métadonnées ici pour trouver des informations concernant les types T1, T2 et T3. Ainsi, nous avons utilisé trois consoles.Instructions de fonction writeLine () Pour afficher le nom, le nom complet, l'espace de noms et le basetype de type T1, T2 et T3 séparément. Pour cela, nous utilisons les attributs «Nom», «FullName», «Namespace» et «Basetype» d'une classe de réflexion dans le code.

Nous avons compilé cette «réflexion nouvellement faite.Fichier CS »avec le compilateur C #« MCS »déjà intégré dans notre système Linux. Le fichier «EXE» de ce code a été généré, et nous l'avons utilisé pour exécuter le code compilé avec la commande d'exécution «mono». La sortie affichée sur notre écran nous montre le nom, le nom complet, l'espace de noms et les informations de base pour la chaîne, entier et le caractère de type chargé.

Exemple # 02:

Dans notre premier exemple, nous avons obtenu des informations concernant le type dans les métadonnées C # à l'aide des attributs de classe de réflexion. Nous utiliserons la classe de réflexion pour obtenir des informations sur les métadonnées concernant l'assemblage chargé."Ainsi, nous avons commencé notre exemple avec l'utilisation de la bibliothèque« système »dans la première ligne et en utilisant le« système.Classe de réflexion »dans la deuxième ligne.

Ce code contient un test d'espace de noms avec le même test de classe de nom. Dans ce test de classe, nous utilisons la fonction du pilote principal () pour commencer à exécuter notre système. Dans la fonction Main (), l'exécution commence par le chargement d'un assemblage «t."Cette variable d'assemblage chargée" T "obtiendra les informations de métadonnées concernant l'assemblage" int "de C # via la fonction" Typeof "en utilisant" int ", suivi du mot et du mot-clé" assemblage ". La ligne exacte suivante a la console.Fonction écrite () Pour afficher les informations sur les métadonnées concernant l'assemblée «t."La classe et l'espace de noms sont terminés ici, et le code est enregistré pour une utilisation.

Nous avons compilé ce code C # nouvellement créé avec le compilateur «MCS», puis l'avons exécuté avec l'exécuteur d'exécution «Mono» pour C # dans Ubuntu 20.04. Il a affiché le nom d'une bibliothèque pour l'assemblage «T» comme «MSCorLib», sa version, sa culture et son jeton de clé publique sur notre écran en dessous.

Exemple # 03:

Dans notre dernier exemple, nous allons examiner les informations sur les métadonnées pour toutes les classes, méthodes, attributs ou paramètres utilisés dans le code via la classe de réflexion. Donc, nous avons commencé ce code avec le même modèle de code que nous avons utilisé dans les deux exemples ci-dessus, je.e., L'utilisation de la bibliothèque système et du «système.Réflexion »Classe. Un «nouveau» espace de noms a été créé qui contient deux classes, i, i.e., Informations et test.

Discutons d'abord de la classe «Info». Dans cette classe, nous utilisons la définition des propriétés ou des variables que nous devons utiliser dans ce code, je.e., Age de type int et nom de type de chaîne. Les attributs «get» et «set» sont utilisés pour obtenir la valeur des deux valeurs et les attribuer à l'âge et au nom des variables, respectivement. Voici deux fonctions de constructeur dans les informations de classe. Le premier constructeur n'a pas de paramètres, tandis que l'autre est un constructeur paramétré obtenant des valeurs dans de nouvelles variables «A» et «n."Le constructeur simple initialise les valeurs de l'âge variable et du nom à 25 ans et« vide », respectivement.

D'un autre côté, l'autre constructeur a attribué des valeurs variables aléatoires aux variables d'âge et de nom, i.e., vide. La fonction «Show ()» définie par l'utilisateur a été utilisée ici pour afficher les valeurs «âge» et «nom» variables sur la console d'Ubuntu 20.04 Utilisation de la fonction WriteLine () de la classe de console de la bibliothèque système. La première classe est terminée ici.

Discutons de la classe «test» où nous avons utilisé les attributs de «réflexion» pour obtenir des informations sur les métadonnées concernant le code. Donc, il contient une méthode Main () qui est notre exécuteur testamentaire pour ce code. Nous avons chargé un objet pour l'assemblage de classe «ASB» pour obtenir l'assemblage en cours d'exécution avec la fonction «GetExecutingAssembly». Cet objet «ASB» a été utilisé pour appeler la fonction «getTypes ()» pour stocker les informations de type d'assemblage dans le tableau de type «t."

Maintenant, il est temps d'itérer chaque type de l'assemblage et d'obtenir des informations concernant ses métadonnées. Ainsi, dans la première boucle «foreach», nous avons itéré le type utilisé dans le code via le tableau de type «T», i.e., Des classes. Le nom du total des classes utilisés sera affiché par l'attribut «Nom» de la classe de réflexion. Un tableau «Met» de Methodinfo Type a été initialisé pour obtenir des méthodes totales dans la classe spécifique en utilisant l'itérateur «I."Une boucle intérieure" Foreach "est utilisée pour afficher le nom de chaque méthode au sein de la classe spécifique via l'attribut de nom.

Le tableau de type paramètre de type «par» est défini pour obtenir les informations des paramètres pour toutes les méthodes de la classe spécifique à l'aide de la fonction «getParameters ()». La dernière boucle intérieure est utilisée pour itérer tous les paramètres «P» trouvés dans le tableau «PAR» pour afficher le nom du paramètre et le paramètre de paramètre à l'aide du nom et de l'attribut de paramètre de la classe de réflexion. Notre code est maintenant complet et prêt pour la compilation.

Les informations sur les métadonnées concernant les classes «info» et «test» s'affichent séparément. Les classes ont des méthodes de type paramètre int; méthodes de type de chaîne; et méthodes de type d'objet

Conclusion:

C'est ainsi qu'une classe d'espace de noms de réflexion peut être utilisée pour obtenir des informations sur les métadonnées concernant les méthodes, les types, les paramètres, les assemblages et les classes. Dans nos deux premiers exemples, nous avons discuté de l'utilisation du nom, du nom complet, de l'espace de noms, de l'attribut de base de la classe de réflexion pour obtenir des informations concernant les types et l'assemblage chargés, i.e., int, char, chaîne. Dans le dernier exemple, nous avons utilisé les GetTypes, GetMethods (), les GetParameters et l'attribut de nom et de type de paramètre de la classe de réflexion pour obtenir des métadonnées sur l'ensemble du code.