locked
Comment créer une instance de type si on ne connait que le nom RRS feed

  • Discussion générale

  • On doit d'abord obtenir une référence de type. Si le type pour lequel on veut créer une instance est dans mscorlib ou l'assembly actuel, on peut utiliser Type.GetType  

    S'il s'agit d'un assemblage de différent, vous pouvez appeler Type.GetType et transmettre le nom de type complet, y compris des informations sur l'assembly, ou vous pouvez trouver ou charger l'assembly et puis appelez Assembly.GetType(name) sur cette référence d'assemblage. 

     Une fois que vous avez une référence type, vous pouvez utiliser Activator.CreateInstance(type)   pour créer une instance, ou appelez Type.GetConstructor pour obtenir un constructeur spécifique que vous pouvez ensuite utiliser pour créer une instance en appelant sa methode Invoke.

     Exemple :

    On crée une application C# WindowsFormsApplication.

    On ajoute une classe, Class1 

    namespace WindowsFormsApplication
    
    {
    
        class Class1
    
        {
    
            public int i;      
    
            public Class1()
    
            {
    
                i = 10;
    
            }
    
        }
    
    }
    
    
    
    

     On ajoute du code dans une méthode de l’application, pour récupérer un objet de type Class1 a l’aide de Type.GetType : 

    // Récupérer le type de Class1 à partir du nom 
    Type t = Type.GetType("WindowsFormsApplication.Class1", true);
    
    
    // Création d'une instance 
    // 1ère solution : Créer un objet ‘o’ de type Class1 en appellant le constructeur sans paramètre.                       
    object o = Activator.CreateInstance(t);  //l'object 'o' est de type Class1 
    
    // 2ème solution : Créer un objet à partir d'un constructeur spécifique
    // Rechercher le constructeur pour le type Class1
    Type[] types = new Type[0];
    ConstructorInfo ci = t.GetConstructor(types); //on obtient le constructeur sans parametres 
    
    // On crée l'objet o1 de type Class1 a l’aide du constructeur ‘ci’
    object[] paramètres = new object[0];
    object o1 = ci.Invoke(paramètres);    
    

                                                  

    Pour plusieurs questions sur la bibliothèque de classes .NET, visitez Foire aux Questions  -  Bibliothèque de classes .NET Framework  


    Alex Petrescu - MSFT
    jeudi 25 février 2010 13:25