Le meilleur didacticiel # Réflexion C (de réflexion) en 2024, dans ce didacticiel, vous pouvez apprendre Reflex (Réflexion) utilisations,Voir Métadonnées,Exemples,
des moyens de réflexion peuvent accéder au programme, sa capacité à détecter et modifier leur propre état ou de comportement.
Assemblage contient le module qui contient les types, qui à son tour contient des membres. Réflexion fournit un lot d'objets assemblages, des modules et des types.
Vous pouvez utiliser la réflexion pour créer dynamiquement une instance du type, le type est lié à un objet existant, ou d'obtenir le type d'un objet existant. Vous pouvez ensuite appeler le type d'approche ou d'accéder à ses champs et ses propriétés.
avantages:
Inconvénients:
Reflex (Réflexion) aux fins suivantes:
Nous avons déjà mentionné dans la section ci-dessus, l'utilisation de la réflexion (réflexion) peut afficher les propriétés (attribut) information.
Object classeSystem.Reflection MemberInfodoit être initialisé, pour découvrir les propriétés associées à la classe (attribut). Pour ce faire, vous pouvez définir une classe de l'objet cible, comme suit:
System.Reflection.MemberInfo info = typeof (MyClass);
Le programme suivant illustre ce point:
using System; [AttributeUsage (AttributeTargets.All)] HelpAttribute public class: System.Attribute { Url de chaîne readonly public; public string Sujet // Topic est un nommé paramètres (nommés) { obtenir { retourner le sujet; } ensemble { topic = valeur; } } publique HelpAttribute (string url) // url est un positionnement (position) paramètre { this.Url = url; } sujet de private string; } [HelpAttribute ( "Informations sur la classe MyClass")] classe MyClass { } AttributeAppl d'espace de noms { Programme de classe { static void Main (string [] args) { System.Reflection.MemberInfo info = typeof (MyClass); Object [] = attributs info.GetCustomAttributes (true); for (int i = 0; i <attributes.Length; i ++) { System.Console.WriteLine (attributs [i]); } Console.ReadKey (); } } }
Lorsque le code ci - dessus est compilé et exécuté, il affiche les propriétés personnalisées attachées à une classeMyClasssur:
HelpAttribute
Dans cet exemple, nous allons utiliser la propriétéDebugInfocréé dans le dernier chapitre, et utilise la réflexion (réflexion) pour lire les métadonnées de classeRectangle.
using System; using System.Reflection; namespace BugFixApplication { // BugFix une propriété personnalisée est affecté à la classe et ses membres [AttributeUsage (AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)] DebugInfo public class: System.Attribute { int Bugno privé; développeur de private string; lastReview private string; string message public; publique DebugInfo (int bg, string dev, chaîne d) { this.bugNo = bg; this.developer = dev; this.lastReview = d; } public int Bugno { obtenir { retour Bugno; } } public string développeur { obtenir { retour développeur; } } public string LastReview { obtenir { retour lastReview; } } public string message { obtenir { retourner un message; } ensemble { message = valeur; } } } [DebugInfo (45, "Zara Ali", "08/12/2012", Message = "Retour incompatibilité de type")] [DebugInfo (49, "Nuha Ali", "10/10/2012", Message = "variable non utilisé")] classe Rectangle { // Les variables membres protégées longueur double; protégée à double largeur; Rectangle publique (double l, double w) { longueur = l; width = w; } [DebugInfo (55, "Zara Ali", "19/10/2012", Message = "Retour incompatibilité de type")] à double getArea publique () { retour longueur * largeur; } [DebugInfo (56, "Zara Ali", "19/10/2012")] Affichage public void () { Console.WriteLine ( "Longueur: {0}", longueur); Console.WriteLine ( "Largeur: {0}", largeur); Console.WriteLine ( "Zone: {0}", getArea ()); } } // Fin Rectangle de classe classe ExecuteRectangle { static void Main (string [] args) { Rectangle r = new Rectangle (4.5, 7.5); r.Display (); Type de type = typeof (Rectangle); // Traverse la classe Rectangle attributs foreach (Object attributs type.GetCustomAttributes (false)) { DebugInfo dbi = (DebugInfo) attributs; if (null! = dbi) { Console.WriteLine ( "Bug n °: {0}", dbi.BugNo); Console.WriteLine ( "Développeur: {0}", dbi.Developer); Console.WriteLine ( "Dernière révision: {0}", dbi.LastReview); Console.WriteLine ( "Remarques: {0}", dbi.Message); } } // La méthode Iterate attributs foreach (MethodInfo m de type.GetMethods ()) { foreach (Attribut un dans m.GetCustomAttributes (true)) { DebugInfo dbi = (DebugInfo) a; if (null! = dbi) { Console.WriteLine ( "Bug n °: {0}, pour la méthode: {1}", dbi.BugNo, m.Name); Console.WriteLine ( "Développeur: {0}", dbi.Developer); Console.WriteLine ( "Dernière révision: {0}", dbi.LastReview); Console.WriteLine ( "Remarques: {0}", dbi.Message); } } } Console.ReadLine (); } } }
Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:
Longueur: 4.5 Largeur: 7.5 Superficie: 33,75 Bug n °: 49 Développeur: Nuha Ali Dernière révision: 10/10/2012 Remarques: variables inutilisées Bug n °: 45 Développeur: Zara Ali Dernière révision: 08/12/2012 Remarques: Type de retour mismatch Bug No: 55, pour la méthode: getArea Développeur: Zara Ali Dernière révision: 19/10/2012 Remarques: Type de retour mismatch Bug No: 56, pour la méthode: Affichage Développeur: Zara Ali Dernière révision: 19/10/2012 Remarques: