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

VB.NET Discussion :

[VB.NET/Reflection] Comment créer une instance par réflection avec des paramêtres?


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 107
    Points : 60
    Points
    60
    Par défaut [VB.NET/Reflection] Comment créer une instance par réflection avec des paramêtres?
    Bonjour,

    Voila tou est dans le titre (ou presque)

    J'arrive sans trop de problème à créer une instance d'un objet provenant d'une DLL externe. Ceci par réflection en utilisant la méthode CreateIntance.
    J'arrive aussi à utilisé les Set de cet instance pour affilier des valeurs à ses attributs.

    Est il possible de créer une instance de cette objet en y affiliant ses attribus dès la construction. En gros est il possible d'appeler un constructeur avec les paramêtres depuis une réflection? (une sorte de méthode createInstance(type,args()) ???

    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Salut,

    Je suis pas bien sur de comprendre ton soucis, il me semble bien que la méthode Activator.CreateInstance prend en argument un tableau d'objet qu'elle transmet au bon constructeur. C'est ça que tu veux ?

  3. #3
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 107
    Points : 60
    Points
    60
    Par défaut
    Euh oui en effet ... désolé

    J'étais en train de chercher dans les InvokeMember("New" ..... )

    J'ai un problème , je n'arrive pas à appeler mes constructeurs avec paramêtres.

    Par exemple j'en ai un très simple de type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Sub New(ByVal id as Integer){
     Me._id = id
    }
    Pas moyen de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Activator.createInstance(MaClasse,New Object() {1} )

  4. #4
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Args as Object() = {1}
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  5. #5
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 107
    Points : 60
    Points
    60
    Par défaut
    J'avias essayé c'est pareil en fait .

    En fait je crois que ca vient de ma construction mais je ne comprend pas vraiment.

    En fait j'ai une classe abstraite AbVerif:
    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
     
    Public MustInherit Class AbVerif
        Implements IVerif
     
        Private _id As Integer
     
        Public Sub New()
            Console.WriteLine("Constructeur vide")
        End Sub
     
        Public Sub New(ByVal id As Integer)
            Console.WriteLine("Constructeur " + id)
            Me._id = id
        End Sub
     
    ...
     
    End Class
    Une classe qui l'étend XVerif (désolé je palre surement en langage Java)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Public Class XVerif
        Inherits AbVerif
     
        Public Sub New(ByVal id As Integer)
            Console.WriteLine("Constructeur param ")
        End Sub
     
        Public Sub New()
            MyBase.New()
        End Sub
     
    End Class

    Je crée mon Instance de XVerif de cette maniere
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim Args As Object() = {1}
    currentVerif = CType(Activator.CreateInstance(type, Args), IVerif)
    ' type etant bien sur de XVerif
    J'obtient dans ma console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Constructeur vide ?????
    Constructeur param
    De plus à la base mon constructeur XVerif avec ma variable faisait MyBase.New(id). Mais à chaque fois que j'utilise id dans le construction meme pour un console.Write ça me met, System.reflection.TargetInvocationException

  6. #6
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Class XVerif : Inherits AbVerif
    
        Public Sub New(ByVal id As Integer)
            MyBase.New(id)
        End Sub
    
        Public Sub New()
            MyBase.New()
        End Sub
    
    End Class
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

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

Discussions similaires

  1. Comment faire pour créer une instance par item de liste ?
    Par pulsart06 dans le forum Général Python
    Réponses: 5
    Dernier message: 03/05/2012, 22h45
  2. Comment créer une classe de validation avec un paramètre?
    Par Cecile5 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 10/11/2009, 11h29
  3. [VB.NET]Créer une instance par page
    Par Dnx dans le forum ASP.NET
    Réponses: 20
    Dernier message: 31/10/2005, 14h22

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