[VB.NET] ByVal qui réagie comme un ByRef
Bonjour,
Je mets plusieurs classe "Personne" dans ma combo.
Dans une fonction je passe l'item sélectionné en Byval et dans la fonction je modifie les valeurs.
La logique veut qu'en passant un paramètre en ByVal à la sortie de la fonction celui n'est pas modifié.
Sauf que là ce n'est pas le cas.
Si on rappel l'item sélectionné celui a changé de valeur.
Le code ci-dessous n'a aucun intérêt sauf à servir de démo
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
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim p As Personne
p = New Personne
p.nom = "AAAAA"
p.prenom = "BBBBB"
MyCombo.Items.Add(p)
p = Nothing
p = New Personne
p.nom = "CCCCC"
p.prenom = "DDDDDD"
MyCombo.Items.Add(p)
p = Nothing
End Sub
Private Function DEMO_DU_ByVal(ByVal pers As Personne) As String
pers.nom = "Erreur1"
pers.prenom = "Erreur2"
Return "ok"
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MessageBox.Show(DEMO_DU_ByVal(CType(MyCombo.SelectedItem, Personne)))
MessageBox.Show(CType(MyCombo.SelectedItem, Personne).ToString)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
MessageBox.Show(CType(MyCombo.SelectedItem, Personne).ToString)
End Sub
End Class
Public Class Personne
Public nom As String = ""
Public prenom As String = ""
Public Overrides Function ToString() As String
Return nom & " " & prenom
End Function
End Class |
Alors normal ou est-ce un bug ? :?