IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

instance d'objet dynamique


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Janvier 2004
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 208
    Par défaut instance d'objet dynamique
    bonjour,

    De quel manière je peux instancié dynamiquement un objet selon un paramètre de string ou enum.

    pour exemple je possède 2 classes contrôleur (categorie et utilisateur)
    Je souhaite pouvoir créer une instance d'objet d'un des contrôleurs a partir de paramètre de type string ou enum.

    Mon paramètre de type string a la valeur "Categorie" ou "Utilisateur".

    j'ai créer mon instance via la classe de base Object en utilisant activator.createInstance() via un Type.

    Le problème est que Type est toujours null.

    merci

  2. #2
    Membre chevronné Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut
    Bonjour,


    si j'ai bien compris, tu cherches à récupérer un Type depuis son nom, puis créer une nouvelle instance de ce type.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            var ctor = Assembly.GetExecutingAssembly().GetType("className").GetConstructor(new[] { typeof(string) });
            ctor.Invoke(new[] {"salut"});
    Tu peut utiliser Activator.CreateInstance() aussi.
    Si tu comptes l'utiliser plusieurs fois, je te conseille ( si tu le peut ) de créer un délégué.

  3. #3
    Membre très actif
    Inscrit en
    Janvier 2004
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 208
    Par défaut
    merci pour ta reponse

    je cherche plus a instancier une de mes classes.
    pour le moment j'en suis la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                Type type = Type.GetType("compta.DAO." + parametre.ToString());
                Object instance = Activator.CreateInstance(type);
                MethodInfo methode = type.GetMethod("List");
                methode.Invoke(instance, null);
    mais rien a faire mon objet instance est null et donc l'invoke de la methode echoue

  4. #4
    Membre chevronné Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut
    Pas de constructeur sans argument ?

  5. #5
    Membre très actif
    Inscrit en
    Janvier 2004
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 208
    Par défaut
    effectivement le constructeur par défaut pas existant
    la première partie est résolue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //Tableau d'object de categorie
    Metier.Categorie[] listCategorie = new Metier.Categorie[0];
    Type type = Type.GetType(String.Format("compta.Controler.ctl{0}", parametre));
    Object instance = Activator.CreateInstance(type, true);
    MethodInfo methode = type.GetMethod("List_"+parametre.ToString(), Type.EmptyTypes);
     
    listCategorie = (Metier.Categorie[])methode.Invoke(instance, null);
     
    //Avec un tableau d'object pas de retour
    Object[] list = (Object[])(Metier.Categorie[])methode.Invoke(instance, null);
    Lorsque j’invoque la méthode (qui retourne un tableau de categorie) si je ne la cast pas, rien a faire pas de retour.

  6. #6
    Membre chevronné Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //Tableau d'object de categorie
    Metier.Categorie[] listCategorie = new Metier.Categorie[0];
    Sert à rien de l'initialisé, tu l'affectes après

    Lorsque j’invoque la méthode (qui retourne un tableau de categorie) si je ne la cast pas, rien a faire pas de retour.
    Détaille le "pas de retour" j'ai pas compris

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 16/11/2011, 17h41
  2. [PHP 5.0] Créer une instance d'objet dynamique
    Par _jey_ dans le forum Langage
    Réponses: 1
    Dernier message: 07/06/2010, 17h45
  3. [Reflection] Créer un tableau d'objets dynamiquement.
    Par salome dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 25/03/2005, 18h59
  4. [FLASH MX2004] Création d'objet dynamiquement
    Par noarno dans le forum Flash
    Réponses: 3
    Dernier message: 15/12/2004, 11h00
  5. Evenement sur objet dynamique
    Par CanardJM dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 19/11/2004, 13h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo