1 pièce(s) jointe(s)
Pourquoi ma FUNCTION change la valeur de la variable passée ? référence / valeur
Bonjour à tous et merci du temps que je vous prends,
j'apprends le VB.NET et je bute :evilred: depuis plusieurs jours sur le problème suivant :
j'ai une variable nommée departure, elle même ayant la structure de la classe CoordGPS définie ainsi :
classe.vb
Code:
1 2 3 4
| Public Class CoordGPS
Public Lat As Double
Public Lon As Double
End Class |
Quand je clique sur le bouton OK de ma form, le code est censé envoyer la variable departure à la fonction essai_func. Celle-ci utilise une variable intermédiaire nommée abc et est convertie par la fonction DR( ), qui elle-même utilise une variable interne nommée deg (de structure CoordGPS).
Mais a priori, je pensais (et j'aimerais obtenir) que departure ne soit pas elle-même modifiée ! ! ! pourtant c'est ce qui se passe dans le code suivant :
Form1.vb
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 41 42 43
| Public Class Form1
Dim Departure As New CoordGPS
'_____________________________________________
Public Function DR(ByVal deg As Object) As Object
If deg.GetType.Name = "CoordGPS" Then
deg.Lat = deg.Lat * 2
deg.Lon = deg.Lon * 2
ElseIf deg.GetType.Name = "Double" Then
deg = deg * 2
End If
Return deg
End Function
'____________________________________________
Public Function essai_func( _
ByVal dep As CoordGPS _
) As Double
Dim res As Double
Dim abc As New CoordGPS
MsgBox("1: " & dep.Lat & " / " & dep.Lon)
abc = DR(dep)
MsgBox("2: " & dep.Lat & " / " & dep.Lon)
res = abc.Lat
Return res
End Function
'____________________________________________
Private Sub ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ok.Click
Departure.Lat = 10
Departure.Lon = 1
Label1.Text = essai_func(Departure).ToString
Label2.Text = Departure.Lat & " : " & Departure.Lon
End Sub
End Class |
je ne comprends pas pourquoi le msgbox n°2 renvoie la valeur de dep.Lat et dep.Lon 20 : 1 alors que dep n'a a priori pas été modifiée !, idem dans l'évênement OK_click où departure ne devrait pas être modifiée et devrait renvoyer les valeurs d'origine à savoir 10 : 1
Si quelqu'un a la clé de mon problème, merci de m'aider, je n'y comprends plus rien !!!
ps : j'ai affiché ici une version très simplifiée de mon code, pour comprendre ce qui ne va pas, ce que j'ai mal assimilé. Je ne cherche pas une réécriture plus compacte car j'ai besoin de ces différentes fonctions dans mon vrai projet, mais je ne souhaite pas embeter tout le monde avec autant de lignes de code pour pas grand chose. La source est dans le zip joint ci-dessous.