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 :

[VB .Net] Affecter une classe dynamiquement


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 124
    Points
    124
    Par défaut [VB .Net] Affecter une classe dynamiquement
    Bonjour à tous,

    Je souhaiterais savoir s'il est possible d'affecter à une variable un nouvel objet de type dynamique. Je m'explique :

    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
    Interface B
    
    End Interface
    
    Class A extends B
    
    End Class
    
    Class C extends B
    
    End Class
    
    Dim texte As String = "A"
    Dim variable As ADO = new Classe_de_nom("texte")
    Est - ce que vous pensez que cela est possible ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 467
    Points : 647
    Points
    647
    Par défaut
    Alors oui c'est possible (du moins j'ai jamais testé ...)

    Ta syntaxe est fausse ...

    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
    19
    20
    21
    22
    23
    24
    Public Class clsMaClasse 
     
    End Class
     
    Public Class clsMaClasseA Inherits clsMaClasse
     
    End Class
     
    Public Class clsMaClasseB  Inherits clsMaClasse
     
    End Class
     
    Sub Main()
    	Dim uneInstance as New clsMaClasse
     
    	Select Case "MaVariable"
    		Case "UnCas"
    			uneInstance = CType(clsMaClasse, clsMaClasseA)
    		Case "UnAutreCas"
    			uneInstance = CType(clsMaClasse, clsMaClasseB)
     
    	End Select
     
    End Sub
    Je ne suis par contre par certain du "cast" (dans son utilisation) étant donné que je ne l'ai jamais mis à l'épreuve. Mais cela devrait être possible.



    Pour info les interfaces s'utilise comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Public Interface iMonInterface
     
     
    End Interface
    Et l'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Class maClasse Implements iMonInterface
     
    End Class
    L'interface sert en fait à pouvoir modifier le contenu de ta classe sans devoir changer tes classes appelantes.

    Par exemple :
    Ta form appelle une interface "a".
    L'interface "a" manipule la couche métier.
    La couche métier appelle l'interface "b".
    L'interface "b" manipule les couches d'accès aux données.

    Si un jour tu veux modifier ton système de gestion des données, tu ne modifie que ta classe de couche d'accès aux données... Etc..

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 124
    Points
    124
    Par défaut
    D'accord mais donc il faut que je passe par une méthode pour récupérer le type de ma classe et ensuite pouvoir l'instancier.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 467
    Points : 647
    Points
    647
    Par défaut
    ça reste dynamique

    Tu pourrais penser faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim instanceCls as New clsMaClass
    Dim maVar as String = "clsMaClasseB"
     
    instanceCls = CType(instanceCls, maVar)
    Mais je crois qu'il va tenter de convertir ta variable instanceCls en String.

    Donc oui, il va falloir que tu passes par une méthode qui selon ton cas, convertie correctement ton instance de classe

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2006
    Messages : 127
    Points : 124
    Points
    124
    Par défaut
    Ben en fait j'ai retenu ta première idée, celle de faire un Select Case

    ce qui donne ceci

    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
    Public ado_systeme As ADO = getADOClasse(My.Settings.ado_systeme)
    
        Private Function getADOClasse(ByVal _nom As String) As ADO
            Select Case _nom
                Case "Access"
                    Return New Access
                Case "XML"
                    Return New XML
                Case "Mysql"
                    Return New Mysql
                Case Else
                    Return New Access
            End Select
        End Function
    
    Et ça fonctionne ...

    Je te remercie pour ton idée ça m'a permis de bien avancer

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 467
    Points : 647
    Points
    647
    Par défaut
    Je me permets aussi d'y rajouter une petite touche de blindage dans ton code :

    Soit tu passes par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Enum enTypeAdo
    Access
    XML
    MySQL
    End Enum
    Ensuite ton select Case se base sur un des éléments de l'énumération (la possibilité d'erreur est moins grande)

    Ou bien tu rajoute sur un
    Et Tu testes avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "ACCESS"
    "XML"
    "MYSQL"
    Si jamais tu te bases sur un fichier de configuration ou autre, ton code risque de ne plus marcher.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/07/2006, 15h02
  2. Réponses: 14
    Dernier message: 15/12/2005, 18h46
  3. [C#] Invoquer une class dynamiquement
    Par nicoo dans le forum C#
    Réponses: 4
    Dernier message: 09/11/2005, 09h11
  4. Réponses: 4
    Dernier message: 07/04/2005, 13h37
  5. [VB.NET] Afficher une image dynamiquement
    Par Sadneth dans le forum ASP.NET
    Réponses: 20
    Dernier message: 07/01/2005, 16h26

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