Partage
  • Partager sur Facebook
  • Partager sur Twitter

L'opérateur "this"

Sujet résolu
Anonyme
    27 avril 2011 à 16:08:41

    Bonjours,

    Citation : undefined

    this est une variable qui contient la référence vers l'objet lui-même ("this" veut dire "ceci" en Anglais). L'écriture this.m_age permet d'accéder au membre m_age de l'objet référencé par this.



    Comment sait-on quel objet est référencé par "this" ?
    • Partager sur Facebook
    • Partager sur Twitter
      27 avril 2011 à 16:13:18

      this représente toujours l'objet en lui-même.

      par exemple

      public class Toto
      {
          public int i;
      
          public Toto(int i)
          {
              this.i = i;
          }
      }
      


      quand tu créeras un objet quelconque de la classe Toto : this référencera ce nouvel objet, il n'est (à ma connaissance, peut être que je me trompe) pas utile (utilisable ?) en dehors des méthodes de classe.

      Une utilité est présentée ici : lever une ambiguité entre le membre i de ma classe toto et la valeur paramètre i du constructeur.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        27 avril 2011 à 16:21:53

        Il n'y a pas eu de déclaration d'objet dans ton exemple, à par si je me trompe. :euh:

        Une classe peux contenir combien d'objet ?
        • Partager sur Facebook
        • Partager sur Twitter
          27 avril 2011 à 16:28:20

          Non effectivement je n'ai pas mis de déclaration d'objet dans cet exemple, j'ai juste illustré une mise en situation de l'opérateur this.

          Une classe ne contient pas d'objet (au sens de la programmation), elle contient des membres et des méthodes, plus la référence this qui pointe sur l'objet (au sens : instance) lui même :

          Toto obj = new Toto(10);
          


          Voici la déclaration d'un objet de type Toto correspondant à la classe bidon que j'ai utilisé tout à l'heure, lors de cette déclaration le constructeur est appelé et this pointe sur obj lui même.

          Si je déclare un autre objet :
          Toto obj2 = new Toto(12);
          


          alors cette fois this pointera sur obj2.
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            27 avril 2011 à 16:42:54

            Merci pour ces explication.

            Une autre question :

            public class sdz
            {
                 private int numbers;
                 sdz a = new sdz(4)
                 public sdz(int number)
                 {
                     <gras>this.numbers = number;</gras>     }
            }
            


            Est-ce possible ce que j'ai mis en gras sachant que la variable numbers est privé ?
            • Partager sur Facebook
            • Partager sur Twitter
              27 avril 2011 à 16:50:22

              Citation : Marvinr


              public class sdz
              {
                   private int numbers;
                   sdz a = new sdz(4)
                   public sdz(int number)
                   {
                       this.numbers = number;     }
              }
              


              Est-ce possible sachant que la variable numbers est privé ?



              Oui, la définition d'un membre privé (au sens : "pas public") est que seules les méthodes à l'intérieure de ta classe peuvent le modifier.
              Par contre la déclaration de sdz a = new sdz(4) n'est pas à sa place ;) La séparation de code doit être :

              public class sdz
              {
                   private int numbers;
                   public sdz(int number)
                   {
                       this.numbers = number;    
                   }
              }
              

              d'un coté et dans ton programme ailleurs (avec des exemples illustrant le coté private de numbers):
              sdz a = new sdz(4); //va créer un objet a avec a.numbers qui est égal à 4;
              a.numbers = 10; //va planter à la compil car comme numbers est privé on ne peut pas y accéder de l'extérieur
              

              par exemple.

              Edit correction suite avertissement Aethec (merci :) )
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                27 avril 2011 à 16:55:45

                Merci pour toutes tes explications. ;)
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  27 avril 2011 à 17:10:09

                  TabBambrine, tu as tort...un membre privé ne peut pas être lu ailleurs que dans sa classe.

                  public class MyClass
                  {
                      // Impossible d'y accéder en dehors de la classe
                      private string privateString;
                  
                      // Peut être défini ou lu partout
                      public string PublicString;
                  
                      // Le set est private, donc ReadonlyString ne peut être défini que dans les méthodes de la classe. Mais le get est public.
                      public string ReadonlyString { get; private set; }
                  }
                  
                  // ...
                  var obj = new MyClass();
                  Console.WriteLine( obj.privateString ); // Ne compile pas
                  obj.privateString = "hello"; // Ne compile pas
                  Console.WriteLine( obj.ReadonlyString ); // OK
                  obj.ReadonlyString = "hello"; // Ne compile pas
                  Console.WriteLine( obj.PublicString ); //OK
                  obj.PublicString = "hello"; // OK
                  
                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 avril 2011 à 17:11:35

                    Ah oui en effet, j'ai zappé le coup du getter public et setter privé, désolé, je corrige de suite.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      27 avril 2011 à 17:29:44

                      Merci à vous 2 pour ces modifications.
                      • Partager sur Facebook
                      • Partager sur Twitter

                      L'opérateur "this"

                      × 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