Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de compréhension du Me.

Sous VB.NET

Sujet résolu
    6 novembre 2011 à 23:15:11

    Bonsoir a vous, voila je suis entrain d'apprendre ce langage (Je suis dans le chapitre de TP: Navigateur WEB).
    Mais voila je ne comprend pas l'utilité du Me. par exemple:

    Me.TXT_RECOIT.Text = "Salut"
    Me.TXT_RECOIT.TextAlign = HorizontalAlignment.Center
    


    Puisque sans Me. le programme compile et s’exécute sans aucun problème.
    Merci a ceux qui prendrons la peine de éclairé sur ce point du cour.
    • Partager sur Facebook
    • Partager sur Twitter
      6 novembre 2011 à 23:48:43

      Le Me dit au compilateur VB que tu cherche à utiliser un objet qui est dans ton module (c'est ça en VB ou c'est une classe) je pars du principe que c'est une classe.

      Une classe est constituée d'attributs (variables) et méthodes (fonctions qui font des choses), et le Me dit au VB que ce que tu cherche est dans ta classe.

      Exemple : j'ai deux classes A et B.

      Dans A je déclare une variable valueA = 15, et je peux faire Me.valueA = 16, ça compile et ça marche.
      Maintenant je pareil dans B, sauf que je nomme ma variable valueB.

      Si j'essaie de faire Me.valueB depuis A, j'ai une belle erreur !
      valueB apparient à B et n'est pas définie dans A.

      C'est comme ton bras, tu peux le bouger tranquillement mais tu ne peux pas bouger celui de quelqu'un d'autre par un ordre du cerveau. ;)
      • Partager sur Facebook
      • Partager sur Twitter
      "Il est impossible pour un homme d'apprendre ce qu'il croit déjà connaître"
        7 novembre 2011 à 1:39:44

        Merci a toi, j'ai compris a quoi ça sert mais je ne vois toujours pas son utilité puisque si j’écris :

        valueA = 16 dans la classe A sasn écrire le Me. ça compile et ça marche.
        • Partager sur Facebook
        • Partager sur Twitter
          7 novembre 2011 à 14:22:32

          Bonjour,

          Me (équivalent de this en C#) ne sert que dans un seul contexte (pour moi en tout cas) ; éviter une collision de noms
          Tu as une classes Person qui a une propriété Salary de type Decimal, et tu souhaites avoir un constructeur qui transmets ce salary.
          Class Person
          
              Public Property Salary As Decimal
          
              Public Sub New(ByVal salary As Decimal)
                  'salary = salary
                  Me.Salary = salary
              End Sub
                  
          End Class
          


          Si tu décommentes la ligne tu verras, que les deux côtés du égal reflètent le paramètre du constructeur (VB.Net étant insensible à la casse salary et Salary sot identiques)
          et donc pour bien affecter salary (le paramètre) dans Salary (appartenant à l'instance active de Person) on le préfixe de Me. pour lever l'ambiguité

          On aurait aussi pu nommer le paramètre autrement, mais là on peut perdre en sémantique sur la signification du paramètre à passer.

          Cordialement !
          • Partager sur Facebook
          • Partager sur Twitter
          Censément, quelqu'un de sensé est censé s'exprimer sensément.
            7 novembre 2011 à 16:27:00

            Merci a toi pour cette explication.
            • Partager sur Facebook
            • Partager sur Twitter
              7 novembre 2011 à 19:03:22

              Il eput aussi être utilisé pour la clarté du code.

              Me.A = 5
              A = 5

              Tu vois direct' que A appartient à ta classe actuelle. ;)
              • Partager sur Facebook
              • Partager sur Twitter
              "Il est impossible pour un homme d'apprendre ce qu'il croit déjà connaître"
                7 novembre 2011 à 19:53:52

                Citation : Chiheb2010

                Il eput aussi être utilisé pour la clarté du code.

                Me.A = 5
                A = 5

                Tu vois direct' que A appartient à ta classe actuelle. ;)



                A ne peut qu'appartenir à la classe actuelle (je dirais même qu'à l'instance actuelle) :
                Si "autre chose" possède un membre A (même si autre chose est une autre instance de la même classe), dans le code il sera utilisé comme suit: instanceDeAutreChose.A

                Exemple avec un "constructeur par recopie"

                Class Person
                
                        Public Property Salary As Decimal
                
                        Public Sub New(ByVal other As Person)
                            'aucune ambiguïté possible sur l'appartenance du premier Salary
                            Salary = other.Salary
                        End Sub
                End Class
                


                Cordialement !
                • Partager sur Facebook
                • Partager sur Twitter
                Censément, quelqu'un de sensé est censé s'exprimer sensément.
                  7 novembre 2011 à 19:54:34

                  C'est ce que je voulais dire.
                  Désolé de m'être mal exprimé ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                  "Il est impossible pour un homme d'apprendre ce qu'il croit déjà connaître"

                  Problème de compréhension du Me.

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown