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:
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:
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 |