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
=> 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
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
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
Partager