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 :

instanciation d'une classe c#


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 50
    Points : 43
    Points
    43
    Par défaut instanciation d'une classe c#
    Bonjour,salam

    je developpe une application qui traite un ensemle de modèle de fichier txt!
    pour chaque modèle je developpe une classe!!dans cette aplication je dois prévenir le besoin d un nouveau modèle (classe) à n importe quel moment!!

    le problèle c'est comment je peux instancier une classe dont le nom n'est connu que via une string!!!

    merci d'avance

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Il faut se servir de Activator.CreateInstance

    Par exemple pour créer un objet de type MaClasse dont le nom de ce type est dans le fichier de configuration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    //on récupére le nom de la classe à créer dans le fichier de config    
    string montypeStringType = ConfigurationManager.AppSettings["leTypeACreer"];
     
    if (String.IsNullOrEmpty(montypeStringType))
    {
         throw (new NullReferenceException("ConnectionString configuration is missing from you web.config"));
    }
    else
    {
         Type montypeType = Type.GetType(montypeStringType);
         if (monTypeType == null)
         {
                throw (new NullReferenceException("Type can not be found : " + montypeStringType ));
         }
         //on crée l'objet
         MaClasse monObjet = (MaClasse)Activator.CreateInstance(monTypeType);
    }
    extrait du fichier de config
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <appSettings>
        <add key="leTypeACreer" value="MaClasse"/>
    </appSettings>
    A noter qu'il faut le chemin complet pour le nom de la classe (avec le namespace). Par exemple: monNamespace.MaClasse

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Si les classes utilisées pour chaque modèle ont un tronc commun (une interface ou une classe abstraite) qui a lui seul fournit le nécessaire en terme de fonctionnalités, l'utilisation d'une fabrique est également possible.

    Cherches design pattern et factory sous google et tu trouveras pas mal de choses à ce sujet

  4. #4
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 50
    Points : 43
    Points
    43
    Par défaut
    svp pour la ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     //on crée l'objet
         MaClasse monObjet = (MaClasse)Activator.CreateInstance(monTypeType);
    moi je vais récupérer le nom d'une dizaine de classe! à la palce de monObjet est ce que je peux pas utiliser un nom générique pour evité qu il y aura bcp d'instance de classe de type différent avec le mm nom!!!

    si j'utilise les threads est ce ça resoud le prob

    merci d'avance

  5. #5
    Membre habitué
    Homme Profil pro
    Responsable des études
    Inscrit en
    Septembre 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2005
    Messages : 104
    Points : 165
    Points
    165
    Par défaut
    Comme là dit StorminOn il te faut un systéme avec une interface si l'ossature de tes classes est pareille et ainsi tu pourras faire du générique ou non.

  6. #6
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 50
    Points : 43
    Points
    43
    Par défaut
    comment ça !!?

  7. #7
    Membre habitué
    Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 156
    Points
    156
    Par défaut
    désolé je passais par là et ton problème m'a intéressé ; plus de détails sur le pattern factory ici
    L'exemple nommé "Real World" est très clair =)

  8. #8
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 50
    Points : 43
    Points
    43
    Par défaut
    merci je vais le voir

  9. #9
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 50
    Points : 43
    Points
    43
    Par défaut
    à ceux intérésser par ce prob!

    récapitulation : je vx instancier des classe en sachant que le Type n est pas connu que via une variable!!!!

    Solution :
    -tous les classes que je vx instancier de cette manière doivent avoir une classe mère (héritage), qui peux avoir une seul méthode virtual , et qui est un point commun entre ttes les classe filles!
    - cette méthode déclaré avec mot clé "override", pour forcé l appel des methode des classe héritant.
    puis
    Citation Envoyé par The_badger_man
    Il faut se servir de Activator.CreateInstance

    Par exemple pour créer un objet de type MaClasse dont le nom de ce type est dans le fichier de configuration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
                
    //on récupére le nom de la classe à créer dans le fichier de config  // ou de n import q ell autr manièr  
    string montypeStringType = ConfigurationManager.AppSettings["leTypeACreer"];
     
    if (String.IsNullOrEmpty(montypeStringType))
    {
         throw (new NullReferenceException("ConnectionString configuration is missing from you web.config"));
    }
    else
    {
         Type montypeType = Type.GetType(montypeStringType);
         if (monTypeType == null)
         {
                throw (new NullReferenceException("Type can not be found : " + montypeStringType ));
         }
         //on crée l'objet
         MaClasse monObjet = (MaClasse)Activator.CreateInstance(monTypeType);
    
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    123
     
    "au lieu de Maclasse utiliser la Classe mère!!
    et par polymorhisme il sera de type que vous vouler instancier!!"
    }
    extrait du fichier de config
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <appSettings>
        <add key="leTypeACreer" value="MaClasse"/>
    </appSettings>
    A noter qu'il faut le chemin complet pour le nom de la classe (avec le namespace). Par exemple: monNamespace.MaClasse

    merci infiniment
    salam

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 04/10/2006, 15h45
  2. Instanciation d'une classe dans un CustomTag
    Par santana2006 dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 30/09/2006, 12h08
  3. Réponses: 2
    Dernier message: 21/04/2006, 20h18
  4. instanciation d'une classe
    Par firejocker dans le forum C++
    Réponses: 6
    Dernier message: 15/11/2005, 11h54
  5. Réponses: 7
    Dernier message: 10/11/2005, 10h09

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