Reflection en C#

En C#, la réflexion est un processus permettant d’obtenir des métadonnées d’un type en cours d’exécution.

L’espace de noms System.Reflection contient des classes qui vous permettent d’obtenir des informations sur l’application et d’ajouter dynamiquement des types, des valeurs et des objets à l’application.
 
 
Reflection fournit des objets (de type Type) décrivant des modules et des types. Nous pouvons utiliser Reflection pour créer dynamiquement une instance d’un type, lier le type à un objet existant ou obtenir le type à partir d’un objet existant et appeler ses méthodes ou accéder à ses champs et propriétés. Si nous utilisons des attributs dans notre code, Reflection nous permet d’y accéder.

Voici un exemple simple sur Reflection, en utilisant la méthode statique GetType héritée de la classe Object pour obtenir le type d’une variable.

public class WayToLearnX { 
  
    public static void Main() 
    { 
        int a = 5;  
        System.Type type = a.GetType();  
        System.Console.WriteLine(type);
    }
}

La sortie :

System.Int32

 
 
Dans les exemples suivants, nous allons utiliser la classe String comme exemple.
 

Exemple de Reflection : Afficher des informations sur un type donné
using System;
using System.Reflection;
public class WayToLearnX
{
    public static void Main()
    {
        //l'opérateur typeof est utilisé pour obtenir le type de l'objet
        Type t = typeof(System.String);
        //récupérer le nom complet du type.
        Console.WriteLine(t.FullName); 
        //récupérer le type de base ou parent.
        Console.WriteLine(t.BaseType);
        //vérifier si le type est une interface.  
        Console.WriteLine(t.IsInterface);
        //vérifier si le type est une class. 
        Console.WriteLine(t.IsClass);  
        //vérifier si le type est Enum.
        Console.WriteLine(t.IsEnum);
        //vérifier si le type est public.   
        Console.WriteLine(t.IsPublic);  
        //vérifier si le type est Abstract.
        Console.WriteLine(t.IsAbstract); 
    }
}

La sortie :

System.String
System.Object
False
True
False
True
False

 

Exemple de Reflection : Afficher les constructeurs
using System;
using System.Reflection;
public class WayToLearnX
{
    public static void Main()
    {
        Type t = typeof(System.String);
        
        Console.WriteLine("Les constructeurs du type {0} est :", t);
        ConstructorInfo[] infos = t.GetConstructors(BindingFlags.Public | BindingFlags.Instance);
        foreach (ConstructorInfo info in infos)
        {
            Console.WriteLine(info);
        }
    }
}

La sortie :

Les constructeurs du type System.String est :
Void .ctor(Char*)
Void .ctor(Char*, Int32, Int32)
Void .ctor(SByte*)
Void .ctor(SByte*, Int32, Int32)
Void .ctor(SByte*, Int32, Int32, System.Text.Encoding)
Void .ctor(Char[], Int32, Int32)
Void .ctor(Char[])
Void .ctor(Char, Int32)

 
Les méthodes anonymes en C#

Exemple de Reflection : Afficher les méthodes disponible dans un type donné
using System;
using System.Reflection;
public class WayToLearnX
{
    public static void Main()
    {
        Type t = typeof(System.String);
        
        Console.WriteLine("Les méthodes disponibles dans le type {0} sont :", t);
        MethodInfo[] infos = t.GetMethods(BindingFlags.Public | BindingFlags.Instance);
        foreach (MethodInfo info in infos)
        {
            Console.WriteLine(info);
        }
    }
}

La sortie :

Les méthodes disponibles dans le type System.String sont :
Boolean Equals(System.Object)
Boolean Equals(System.String)
Boolean Equals(System.String, System.StringComparison)
Char get_Chars(Int32)
Void CopyTo(Int32, Char[], Int32, Int32)
Int32 get_Length()
System.String ToLower()
System.String ToUpper()
System.String ToString()
System.Object Clone()
System.String Trim()
System.String Replace(Char, Char)
System.String Remove(Int32)
System.Type GetType()
...

 

Exemple de Reflection : Récupérer l’assembly
using System;
using System.Reflection;
public class ReflectionExample
{
   public static void Main()
    {
        Type t = typeof(System.String);
        Console.WriteLine(t.Assembly); 
   }
}

La sortie :

mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
qcm-csharp

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *