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 :

[C#] Comment instancier un objet à partir d'une string ?


Sujet :

C#

  1. #1
    Membre régulier Avatar de NeoMan
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 171
    Points : 76
    Points
    76
    Par défaut [C#] Comment instancier un objet à partir d'une string ?
    Bonjour à tous !!

    Je cherche à instancier un objet en ayant uniquement le nom de la classe sous forme de chaîne de caractères.
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string ma_classe = "MaClasse";
    Type ma_classe_type = FonctionStringToType(ma_classe);
    object mon_instance = ma_classe_type.GetConstructor(null).Invoke(null);
    Mais je ne connais pas la méthode permettant de transformer un string en un Type. De la même façon, je n'ai pu tester ma 3ème ligne, donc c'est une hypothèse et non une théorie (les scientifiques comptez-vous !).

    @++

    NeoMan

  2. #2
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Points : 100
    Points
    100
    Par défaut
    De tête, c'est quelque-chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    using System.Reflection;
     
    string ma_classe = "MaClasse"; 
    Type ma_classe_type = Type.GetType(ma_classe); 
    object mon_instance = Activator.GetInstance(ma_classe_type);
    Tu as aussi une méthode CreateInstance sur les objets de type Assembly.

  3. #3
    Membre régulier Avatar de NeoMan
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 171
    Points : 76
    Points
    76
    Par défaut
    J'avais essayé de faire Type.GetType(string), mais ça me renvoye toujours la valeur null ! Je crois que je vais plutôt me pencher vers les Activator.GetInstance si le problème de GetType est résolu...

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Points : 100
    Points
    100
    Par défaut
    Attention, l'argument de Type.GetType(string typeName) est le AssemblyQualifiedName : nom du type avec son namespace, suivi du nom de l'assembly.

    Affiche la propriété AssemblyQualifiedName des types que tu veux instancier dynamiquement pour avoir la syntaxe exacte.

  5. #5
    Membre régulier Avatar de NeoMan
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 171
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par Wyatan
    Attention, l'argument de Type.GetType(string typeName) est le AssemblyQualifiedName : nom du type avec son namespace, suivi du nom de l'assembly.
    Avec cette méthode ça tourne sans problème ! Mais ce qui me dérange c'est de devoir indiquer le numéro de version, la culture et le PublicKeyToken (Kézako ??).

    Citation Envoyé par chnew
    faut bouclé la dessus ..

    l'appelant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Assembly.GetCallingAssembly().GetExportedTypes())
    dans les references
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetCallingAssembly().GetReferencedAssemblies();
    J'avoue que je ne vois pas trop à quoi va ressembler le code...
    GetReferencedAssemblies() retourne des AssemblyName. Comment utiliser des AssemblyName pour indiqué l'assembly appelée ??
    Bon je suis pas clair, mais c'est parce que je ne comprends pas comment fonctionne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Assembly.GetCallingAssembly().GetExportedTypes();
    Quoi qu'il arrive ma question de base est résolu, je mets donc le fameux tag...

    @++

    NeoMan

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Points : 100
    Points
    100
    Par défaut
    Mais ce qui me dérange c'est de devoir indiquer le numéro de version, la culture et le PublicKeyToken
    Ces paramètres sont facultatifs. Ca marche très bien sans (sauf si bien sûr tu as par exemple plusieurs versions de la même DLL qui cohabitent ).

  7. #7
    Membre régulier Avatar de NeoMan
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 171
    Points : 76
    Points
    76
    Par défaut
    Ah je préfère

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

Discussions similaires

  1. Delphi - FireBird - Instanciation d'objets à partir d'une BDD
    Par nowayyy36 dans le forum Bases de données
    Réponses: 7
    Dernier message: 25/06/2007, 15h21
  2. Instanciation d'objet à partir d'un String
    Par Ensias dans le forum Langage
    Réponses: 1
    Dernier message: 05/03/2007, 17h27
  3. Réponses: 21
    Dernier message: 22/06/2006, 21h11
  4. Réponses: 4
    Dernier message: 07/01/2006, 18h36
  5. [DOM] Comment creer un DOM à partir d une String
    Par RolandB dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 24/04/2005, 18h11

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