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

ASP.NET Discussion :

Instancier une class a partire d'une variable string


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 92
    Par défaut Instancier une class a partire d'une variable string
    Bon, javais déjà parlé de ce problème ici, mais je bloque sur l'utilisation de Activator.CreateInstance qui m'avait été proposé.

    Voilà le problème :

    imaginon que j'ai une variable de type string qui contien "coucou"


    Pour commencer, je veux tester si class nomé coucou existe.

    Apres, si cette classe existe, je veux l'instancier en lui passant des paramètres.

    Comment faire ?

    Premièrement, avec Activator.CreateInstance, je ne voix pas comment passer les paramètres

    ensuite, je n'arrive pas à utiliser cette fonction, car j'ai beau dépouiller la documentation, je ne comprend ni les instruction d'utilisation, ni les messages d'erreurs...

    Suis-je sur la bonne voie ?

    Comment déterminer le nom d'Assembly de mon site web .net ?

    Quelqu'un pourrait-il me proposer un bout de code exemple ?

    Y aurrai-t-il d'autre solution à ce probleme ?

    Et pour finir, ça n'a rien à voir, mais quel est la diférence entre string et String qui se comportent exactement de la même manière, mais qui ont des colorisations syntaxiques diférentes ?

    Je remercie d'avance les gourous qui sauront répondre à toutes mes interrogations ^^

  2. #2
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Type type = Type.GetType("System.String"); // Création d'un type à partir d'une string
    object[] arguments = new object[1]; // Création d'un tableau d'un seul argument
    arguments[0] = "Neptune".ToCharArray(); // Affectation de l'argument (le constructeur de string accepte un tableau de caractères)
     
    object obj = type.InvokeMember(null, BindingFlags.DeclaredOnly |
    BindingFlags.Public | BindingFlags.NonPublic |
    BindingFlags.Instance | BindingFlags.CreateInstance, null, null, arguments); // Affection à obj du résultat de l'appel d'InvokeMember (voir doc pour les paramètres)
     
    Console.WriteLine("Type: " + obj.GetType().ToString()); // Vérification du type de l'objet créé
    Console.WriteLine("{0}", obj); // vérification de son contenu

    string et String c'est pareil, string n'est qu'un alias de String. Idem pour int = Int32, long = Int64,...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 92
    Par défaut
    Pfiou, c'est du lourd !

    J'ai du mal à comprendre tout ce qu'il se passe.

    Bon, voilà ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Type typeClass = Type.GetType(chaineQuiContienLeNomDeLaClass);
     
    Object[] arguments = new Object[2];
     
    arguments[0] = variableTypeDictionary;
    arguments[1] = variableTypeXmlNodeList;
     
    Object obj = typeClass.InvokeMember(null, System.Reflection.BindingFlags.CreateInstance, null, null, arguments);
     
    // Normalement, la classe appele contien une variable string
    // qui s'appelle retourModule
    LiteraSortie.Text = obj.retourModule;
    Mais là, pas moyen de récupérer ma variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CS1061: 'object' ne contient pas une définition pour 'retourModule' et aucune méthode d'extension 'retourModule' acceptant un premier argument de type 'object' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?)
    Y'a un truc qui m'échappe, mais je ne voie pas trop dans quel direction chercher...

    Merci encore pour ton aide ^^

  4. #4
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Oui, c'est lourd, mais tu fait de la réflection, c'est normal qu'il faut donner autant de paramètres pour aider le runtime à créer ce que tu lui demande.

    Il est normal que tu obtiennes cette erreur. Le type de obj est object, et object ne contient pas de propriété "retourModule". Même si tu as créer le bon type auquel tu t'attend.

    Si tu veux accéder à "retourModule", tu devras encore une fois utliser InvokeMember.

    J'ai cru comprendre que tu débutes en .NET et te voir déjà faire de la réflection me fait méchament penser que tu t'y prend très mal pour atteindre ton but.

    Si tu nous disais ce que tu essaie de faire exactement?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 92
    Par défaut
    Oui, je débute.

    Mais bon, pour ce qui est de la réflexion, pourrais tu me donner quelques ressources, que je voi à quoi ça correspond ?

    Ensuite, j'ai un autre probleme :
    Quand je commente la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    //LiteraSortie.Text = obj.retourModule;
    Je me retrouve avec l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.
    Sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Object obj = typeClass.InvokeMember(null, System.Reflection.BindingFlags.CreateInstance, null, null, arguments);
    A quoi ça peut être du ?

    Bon, sinon, pour revenir à ta question, pour l'instant, je cherche à apprendre à faire certaine choses. Je n'ai pas un but précis.

    Là, je veux savoir comment instancier et acceder à une class avec un nom identique au contenu d'une string apres avoir vérifier que la class en question existe.

    Meric pour ton aide ^^

  6. #6
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Jette un oeil aux tutoriels sur ce site, on y parle de la réflection.

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

Discussions similaires

  1. Instance d'une classe fille à partir d'une classe mère
    Par Mathieu Salles dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 17/10/2012, 16h09
  2. Message sur une form a partir d'une class
    Par topolino dans le forum Windows Forms
    Réponses: 4
    Dernier message: 10/06/2009, 08h57
  3. instanciation d'une classe a partir d'une jComboBox
    Par adrien1 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 30/03/2009, 11h43
  4. Réponses: 1
    Dernier message: 18/03/2008, 15h29
  5. Générer une classe java à partir d'une autre
    Par hebmaster dans le forum Général Java
    Réponses: 5
    Dernier message: 29/05/2006, 16h09

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