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 :

Appel à la méthode surchargée au lieu de la méthode de base


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2017
    Messages : 2
    Par défaut Appel à la méthode surchargée au lieu de la méthode de base
    Bonjour,

    J'ai à communiquer avec deux types d'automates différents dans mon projet.
    Les automates sont chargés dynamiquement en suivant les instructions d'un fichier de configuration XML au démarrage de l'application.
    Lorsque j'appelle la fonction automate.connect() dans Form1 ça passe dans automate::connect() et non pas dans automateTypeA::connect() ou automateTypeB::connect().

    Comment faire pour appelle automateTypeA/automateTypeB::connect() tout en gardant la souplesse actuelle.

    Ci-dessous le code:

    => Mes classes pour modéliser les automates
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    ' Classe de base
    Public MustInherit Class automate
     
        Public Sub connect()
            _isConnected = True
            threadStart()
        End Sub
     
    End Class
     
    ' classé dérivée A
    Public Class AutomateTypeA
        Inherits automate
     
        Public Overloads Sub connect()
     
    	' ICI CODE POUR GENER LA CONNEXION IP AVEC L'AUTOMATE
     
    	' appel a la methode de la classe mère
            MyBase.connect()
     
        End Sub
     
    End Class
     
    ' classé dérivée B
    Public Class AutomateTypeB
        Inherits automate
     
        Public Overloads Sub connect()
     
    	' ICI CODE POUR GENER LA CONNEXION SERIE AVEC L'AUTOMATE
     
    	' appel a la methode de la classe mère
            MyBase.connect()
     
        End Sub
     
    End Class
    => L'instanciation des automates dans Form1

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Public Class Form1
     
    	Private automates As automate()
     
    	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
    		Dim XMLautomates = conf_file.Descendants("automate")
     
    		If (XMLautomates.Count > 0) Then
    			ReDim Me.automates(XMLautomates.Count)
    			Dim k = 0
    			For Each XMLautomate In XMLautomates
    				Select Case XMLautomate.@interface
    					Case "TYPE_A"
    						Me.automates(k) = New AutomateTypeA()
    					Case "TYPE_B"
    						Me.automates(k) = New AutomateTypeB()
    					Case Else
    						' Log type inconnu
    						Continue For
    				End Select
    				k = k + 1
    			Next
    		end if
    	end sub
     
    	Private Sub connectButton_Click() Handles connectButton.Click
            For Each automate In Me.automates
                If Not automate.isConnected() Then
                    automate.connect()   ' <= ne fonctionne pas car appelle la methode de base
                End If
            Next
        End Sub
     
    End Class

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,

    Le comportement est normal. Telle que définie, la méthode Connect() ne permet pas le polymorphisme.
    La méthode de la classe de base doit être définie Overridable et dans les classes héritées, elles doivent être Overrides et non pas Overloads. Après ça fonctionnera.

  3. #3
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2017
    Messages : 2
    Par défaut
    Ça fonctionne parfaitement avec Overridable et Overrides.

    Merci!

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

Discussions similaires

  1. Appeler la méthode surchargée automatiquement
    Par richie_himself dans le forum C#
    Réponses: 2
    Dernier message: 24/07/2009, 14h17
  2. Réponses: 3
    Dernier message: 25/06/2008, 14h38
  3. Appel d'une méthode à partir d'un nom de méthode
    Par tnarol dans le forum Langage
    Réponses: 20
    Dernier message: 07/03/2007, 17h46
  4. Réponses: 4
    Dernier message: 05/02/2007, 14h40
  5. méthodes surchargées
    Par ep31 dans le forum C++
    Réponses: 4
    Dernier message: 14/11/2005, 18h06

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