IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > .NET Framework > Reflexion
        Comment lister les membres d'une classe ?
        Comment créer une instance d'un type dynamiquement ?
        Comment créer une instance d'un type dynamiquement à partir d'une chaine de caractères ?
        Comment savoir si un type implémente une interface donnée ?



Comment lister les membres d'une classe ?
auteur : cardi
La classe Type est la base de la réflexion. Elle permet d'obtenir des informations concernant un type donné comme les constructeurs, méthodes, champs, évènements, ...

Le mot-clé typeof, quant à lui, permet de récupérer une instance de la classe Type par rapport au type de la classe passé en paramètre.

          
      public static void Main()
      {
          // Liste des membres de la classe Customer
          foreach(MemberInfo Mi in typeof(Customer).GetMembers())
          {
              if (Mi.MemberType == MemberTypes.Method)
                  Console.WriteLine("Méthode : {0}", Mi.ToString());
              else if (Mi.MemberType == MemberTypes.Field)
                  Console.WriteLine("Champs : {0}", Mi.ToString());
              else if (Mi.MemberType == MemberTypes.Constructor)
                  Console.WriteLine("Constructeur : {0}", Mi.ToString());
          }
      }

      public class Customer
      {
          public int Id;
          public String Name;

          public void MethodA(String paramA, int paramB)
          { 
              // ... 
          }
      }
      
        

Comment créer une instance d'un type dynamiquement ?
auteur : cardi
Pour instancier une classe à partir d'un type, il vous faudra utiliser la classe Activator :

          
namespace ConsoleApplication1
{
    public class Test
    { }

    class Program
    {
        static void Main(string[] args)
        {
            // Récupération du type à  instancier dynamiquement
            System.Type objType = typeof(Test);

            // Instance dynamique à  partir du type donné
            object objInstanceDynamique = System.Activator.CreateInstance(objType);

            // Casting de l'objet
            Test objTest = objInstanceDynamique as Test;
        }
    }
}
        
lien : fr System.Activator (MSDN)

Comment créer une instance d'un type dynamiquement à partir d'une chaine de caractères ?
auteur : cardi
Pour instancier une classe à partir d'une chaine de caractères, il vous faudra dans un premier temps transformer cette chaine en un objet de type Type. A partir de l'objet Type obtenu, vous pourrez créer une instance grâce à la classe Activator :

          
namespace ConsoleApplication1
{
    public class Test
    { }

    class Program
    {
        static void Main(string[] args)
        {
            // Récupération du type à instancier dynamiquement à partir d'une chaine de caractères
            System.Type objType = System.Type.GetType("ConsoleApplication1.Test");

            // Vérification si le type a bien été retrouvé
            if (objType != null)
            {
                // Instance dynamique à partir du type donné
                object objInstanceDynamique = System.Activator.CreateInstance(objType);

                // Casting de l'objet
                Test objTest = objInstanceDynamique as Test;
            }
            else
            {
                System.Console.WriteLine("Le type semble être incorrect!");
            }
        }
    }
}}
        
lien : fr System.Activator (MSDN)
lien : fr System.Type (MSDN)

Comment savoir si un type implémente une interface donnée ?
auteur : cardi
Grâce à la réflexion, il est possible d'obtenir énormément d'informations à partir du type d'une classe. Pour vérifier si une classe implémente une interface, il vous suffira d'utiliser la méthode GetInterface de la classe Type :

          
namespace ConsoleApplication1
{
    public interface IMonInterface
    { }

    public class Test : IMonInterface
    { }

    class Program
    {
        static void Main(string[] args)
        {
            System.Type objType = typeof(Test);
            System.Type objTypeInterface = objType.GetInterface("ConsoleApplication1.IMonInterface", false);

            if (objTypeInterface != null)
                System.Console.WriteLine("La classe 'Test' implémente l'interface 'IMonInterface' !");
            else
                System.Console.WriteLine("La classe 'Test' n'implémente pas l'interface 'IMonInterface' !");
        }
    }
}
        
lien : fr System.Type (MSDN)


Consultez les autres F.A.Q's


Valid XHTML 1.0 TransitionalValid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2010 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.