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 :

Typer une variable depuis un string


Sujet :

C#

  1. #1
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut Typer une variable depuis un string
    Bonjour tout le monde,

    je vous expose mon problème : j'ai une fonction qui reçoit en paramètre un string. Ce string correspond au nom d'une classe.

    Ce que j'aimerai faire, c'est créé une variable de ce type. Le problème c'est que je ne sais pas comment passer d'un string à un type

    Pourriez vous m'aider ?

    Je cous remercie 'avance
    Cordialement

    Finality

  2. #2
    Invité
    Invité(e)
    Par défaut
    Il me semble que CreateInstance fait ce que tu cherches :
    http://msdn.microsoft.com/fr-fr/libr...=VS.80%29.aspx
    Et Unwrap pour récupérer l'objet créé à partir du handle. L'exemple complet est d'ailleurs dans ce lien :
    http://msdn.microsoft.com/fr-fr/libr...=VS.80%29.aspx

  3. #3
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    Salut Gastiflex,

    j'ai essayé de faire avec les quelques informations que tu m'as donné, mais je rencontre un problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ObjectHandle obj = Activator.CreateInstance("timetableasy_client.Views", "ViewUsers");
    ViewUsers t = (ViewUsers)obj.Unwrap();
    Le problème est que quand ce code s'exécute, la première ligne s'exécute et puis plus rien, on passe jamais à la deuxième ....

    Aurais tu une idée de là où j'ai commis une erreur ?

    Merci d'avance
    Finality

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    SI tu connais l'assembly dans lequel se trouve le type, essaie avec Assembly.GetType, puis Activator.CreateInstance en passant en paramètre le type. Tu récupères directement un objet, pas un ObjectHandle

  5. #5
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    Bonjour tout le monde,

    tout d'abord désolé de mon temps de réponse, mais j'ai eu une semaine tres chargée

    tomlev, je me mélange les pinceaux. L'assembly ça correspond à l'espace de nom ?

    Désolé de mon ignorance

    COrdialement
    Finality

  6. #6
    Invité
    Invité(e)
    Par défaut
    Oui, c'est ton timetableasy_client.Views

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Finality Voir le message
    tomlev, je me mélange les pinceaux. L'assembly ça correspond à l'espace de nom ?
    Citation Envoyé par Gastiflex Voir le message
    Oui, c'est ton timetableasy_client.Views
    Non, pas du tout... l'assembly, pour faire simple, c'est la DLL ou l'exécutable qui contient les classes. En pratique, le namespace correspond souvent au nom de l'assembly, mais ce n'est pas forcément le cas. Un assembly peut contenir des classes réparties dans différents namespaces, et les classes d'un même namespace peuvent être réparties dans différents assemblies.

    En fait, les namespaces sont un système d'organisation logique, alors que les assembly réalisent une séparation physique

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    obj = Activator.CreateInstance(Type.GetType(nom))

    peut répondre à ta problèmatique...
    nom est une chaine avec le nom du type à "activer".

    En fait, ce nom doit être soit un type nativement présent dans mscorlib ou dans l'assembly qui contient le code en cours d'exécution, ou sur des projets plus vaste avec beaucoups d'assembly et namespace, un nom de type avec son namespace et le nom de l'assembly pleinement qualifié.

    Ainsi tu pourra avoir un truc genre

    "Behaviors.CommandBehavior, CustomBehaviors"

    avec respectivement Behaviors.CommandBehavior le type que tu souhaite instancier, et CustomBehaviors la DLL (assembly) ou se trouve le type.

    Ici Behaviors. est le namespace où est défini CommandBehavior.


    Tu peux également plus simplement écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    obj = Activator.CreateInstance("CustomBehaviors", "Behaviors.CommandBehavior");
    Cela dépend un peu de la façon dont tu récupère le nom du type... pleinement qualifié ou non...

  9. #9
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    Bonjour tout le monde,

    alors toujours a la suite de mon problème, j'ai essayé pas mal de solutions et je n'y arrive pas.

    Voilà ce que j'ai essayé en détail :

    Assembly.getType
    Pour celle là, quand je tappe Assembly, on ne me propose pas la méthode getType....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    obj = Activator.CreateInstance(Type.GetType("ViewUser"));
    ceci ne donne rien, l'application passe sur cette ligne puis rien ne s'exécute par la suite, sans produire d'erreur

    Pour apporter plus de précisions voilà mon schéma de namespace :

    timetableasy_client : namespace dans lequel est exécuté mon code
    timetableasy_client.Views : namepsace contenant la classe que j'essai d'appeler

    Je vous remercie pour votre aide à tous

    Cordialement
    Finality

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Finality Voir le message
    Assembly.getType
    Pour celle là, quand je tappe Assembly, on ne me propose pas la méthode getType....
    Pourtant ça existe... à mon avis il te manque un using System.Reflection

    Citation Envoyé par Finality Voir le message
    obj = Activator.CreateInstance(Type.GetType("ViewUser"));
    ceci ne donne rien, l'application passe sur cette ligne puis rien ne s'exécute par la suite, sans produire d'erreur
    Euh... c'est à dire ? ça reste bloqué ? le programme se termine ?
    Au fait, il faut mettre le nom complet du type (avec le namespace)

  11. #11
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Au fait, il faut mettre le nom complet du type (avec le namespace)
    L'erreur venait de là, j'avais pas mis le namespace

    Je vous remercie tous pour votre aide, vous avez tous été top

    Merci encore

    Finality

  12. #12
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    Par contre petite question : mon objet View possède un élément que j'aimerai pouvoir écouter au moment de sa création.

    Le problème est qu'avec le Activator, j'obtiens un type object, et ne peux donc pas accéder à cet évènement.

    Y a-t-il une solution simple ?

    Merci d'avance
    Finality

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Finality Voir le message
    Par contre petite question : mon objet View possède un élément que j'aimerai pouvoir écouter au moment de sa création.
    un évènement tu veux dire ?

    Citation Envoyé par Finality Voir le message
    Le problème est qu'avec le Activator, j'obtiens un type object, et ne peux donc pas accéder à cet évènement.

    Y a-t-il une solution simple ?
    Ben tu peux le caster vers le type voulu... mais je suppose que ça ne te convient pas, puisque tu instancies l'objet sans connaitre son type à la base. Est-ce que tous les types que tu vas instancier comme ça ont cet évènement ? Si oui, le plus simple est de créer une interface implémentée par tous ces types, et de caster le résultat de Activator.CreateInstance vers cette interface.

    Si ça ne répond pas à ta question, essaie d'être plus précis

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

Discussions similaires

  1. convertir une variable de type String en Number
    Par lilbrother974 dans le forum Flash
    Réponses: 13
    Dernier message: 06/09/2006, 09h28
  2. Réponses: 5
    Dernier message: 08/09/2005, 21h33
  3. [DEBUTANT] Transformer une variable Double en STring
    Par Battosaiii dans le forum Langage
    Réponses: 6
    Dernier message: 13/06/2005, 17h43
  4. [JSTL] Récupérer une variable du style <%String bob = "bobby"%>
    Par nickoshiba dans le forum Taglibs
    Réponses: 2
    Dernier message: 15/03/2005, 09h50
  5. Ajouter a une variable de type string, un entier
    Par Little-Freud dans le forum SL & STL
    Réponses: 12
    Dernier message: 05/03/2005, 20h33

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