IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Pourquoi ma FUNCTION change la valeur de la variable passée ? référence / valeur


Sujet :

VB.NET

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 62
    Par défaut 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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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_clickdeparture 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.
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 13/02/2015, 16h24
  2. Réponses: 4
    Dernier message: 10/03/2014, 21h54
  3. Réponses: 6
    Dernier message: 18/01/2007, 10h24
  4. Pourquoi ma variable perd sa valeur ?
    Par Bruno29 dans le forum Flash
    Réponses: 10
    Dernier message: 17/01/2007, 20h56
  5. Réponses: 2
    Dernier message: 04/01/2007, 13h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo