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

Windows Forms Discussion :

[C#] Reflection et Construction générique


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Par défaut [C#] Reflection et Construction générique
    Edit:

    Re bonsoir,

    Je voudrais créer un objet a partir d'une classe perso mais je me retrouve avec l'exception ArgumentNullException typeName is nullNothingnullptra null reference (Nothing in Visual Basic). sur mon GetType()

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object oObject = Activator.CreateInstance(Type.GetType(s));
    Où 's' est une String. Je lui ai donnée 2 valeurs mais aucune n'a fonctionnée ("DummyClass" et "TestApplication.DummyClass")

    DummyClass est ma classe et TestApplication le namespace ou se trouve la classe.

    Je ne comprends pas ce qui ne va pas.. :s

    Precision : Je ne veut pas lui passer le Type directement, c'est à dire Activator.CreateInstance(typeof(DummyClass)) car j'aimerai que ce soit generic.

  2. #2
    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
    Tu sais qu'il y a déjà des classes qui gèrent la sérialisation XML ? pas la peine de gérer ça à la main, heureusement !
    Jette un oeil à la classe System.Xml.Serialization.XmlSerializer

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Par défaut
    Oui je sais mais je souhaite faire un Serializer custom, dans lequel je pourrais gérer n'importes quels type (classe perso, List, Hashtables, etc..)

  4. #4
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Citation Envoyé par LoST_MiNd Voir le message
    Oui je sais mais je souhaite faire un Serializer custom, dans lequel je pourrais gérer n'importes quels type (classe perso, List, Hashtables, etc..)
    Ben pour les classes perso il suffit qu'elles aient l'attribut [Serializable]
    Pour les collections il suffit de faire une petite méthode qui prend en parametre un IEnumerable<T> et pour les dictionnaires (Hastable ou Dictionnary ) même principe.

    Pas la peine de réinventer la roue à chaque developpement

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Par défaut
    Hm oki, c'est vrai que ca serait plus simple , mais je dois le faire comme ça...

    Donc en mettant le probleme dans un contexte plus restreint :

    Comment je peux créer un Object de type String[] et lui donner comme valeur un tableau d'objet contenant des String

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Type tabobject = Type.GetType(xmlNodePropertyList[i].Attributes["type"].Value);
    Ceci fonctionne, j'ai bien là un Type de type String[] mais de réference nulle.

    Comment je peux l'instancier et lui affecter une valeur ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Par défaut
    Citation Envoyé par LoST_MiNd Voir le message
    Hm oki, c'est vrai que ca serait plus simple , mais je dois le faire comme ça...

    Donc en mettant le probleme dans un contexte plus restreint :

    Comment je peux créer un Object de type String[] et lui donner comme valeur un tableau d'objet contenant des String

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Type tabobject = Type.GetType(xmlNodePropertyList[i].Attributes["type"].Value);
    Ceci fonctionne, j'ai bien là un Type de type String[] mais de réference nulle.

    Comment je peux l'instancier et lui affecter une valeur ?
    Une petite idée juste pour ça svp ?

  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 dev01 Voir le message
    Ben pour les classes perso il suffit qu'elles aient l'attribut [Serializable]
    Pour la sérialisation XML ce n'est pas nécessaire...

    Sinon c'est vrai que la sérialisation XML a quelques limitations, notamment ça ne marche pas pour les Hashtable ou Dictionary... je ne vois pas très bien pourquoi d'ailleurs, il suffirait de faire une structure comme ça:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <Dictionary>
        <KeyValuePair>
            <Key>titi</Key>
            <Value>toto</Value>
        </KeyValuePair>
    </Dictionary>
    ou quelque chose d'approchant...

    De toutes façons, il est toujours possible de customiser plus finement la sérialisation avec les attributs de System.Xml.Serialization ou en implémentant l'interface IXmlSerializable

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Par défaut
    Car les dictionnary peuvent avoir n'importe quel type je crois.

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/02/2011, 15h34
  2. Utilisation de la reflection avec des génériques
    Par Tekarihoken dans le forum Framework .NET
    Réponses: 2
    Dernier message: 25/01/2011, 18h06
  3. Réponses: 1
    Dernier message: 17/12/2008, 20h24
  4. [JBuilder 7] Construction d'executable natif
    Par renaudfaucon dans le forum JBuilder
    Réponses: 3
    Dernier message: 24/11/2006, 22h28
  5. Reflections
    Par Laurent Gomila dans le forum DirectX
    Réponses: 4
    Dernier message: 25/07/2003, 14h42

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