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