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

C# Discussion :

get et set en c#


Sujet :

C#

Vue hybride

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 205
    Par défaut get et set en c#
    Voici un code que j'ai teste:

    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private int login
            {
               public get
                {
                    return login;
                }
                public set
                {
                    login = value;
                }
            }
    Je pensais pouvoir accéder et setter la valeur login grace au get et au set en public, mais je me rends compte que non, et qu'il faut ecrire le code suivant:

    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private int _login;
     
    public int login
            {
               get
                {
                    return _login;
                }
                set
                {
                    _login = value;
                }
            }
    3) ou a partir de c# 3 semble-t-il:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public int login {get; set;}

    Voici ma question:

    Puisque le code 1) qui compile ne permet pas d'acceder au setteur ni au getteur qui sont pourtant public, que le code 2) déclare 2 fois plus de variables que nécessaire, et que le code 3 ne déclare rien en private (pas terrible pour le respect du principe d'encapsualtion), je commence a me demander s'il n'est pas plus simple de tout simplement faire comme cela:

    Comment utilisez vous les get et set en c# et comment le justifiez vous?

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par julien_iz Voir le message
    Puisque le code 1) qui compile ne permet pas d'acceder au setteur ni au getteur qui sont pourtant public
    Normal puisque la propriété est marquée comme privée.

    Citation Envoyé par julien_iz Voir le message
    que le code 2) déclare 2 fois plus de variables que nécessaire
    Le code 2 ne déclare qu'une seule variable (_login). La propriété n'est pas une déclaration de variable mais juste un moyen d'y accéder.

    Citation Envoyé par julien_iz Voir le message
    et que le code 3 ne déclare rien en private (pas terrible pour le respect du principe d'encapsulation)
    Si mais c'est le compilateur qui s'en charge. L'encapsulation est toujours préservée via la propriété.

    Bref, je pense que tu devrais revoir un peu la notion de propriété car tu sembles mélanger pas mal de choses. Une propriété c'est l'équivalent des méthodes GetMachin et SetMachin comme on fait en Java, sauf que les propriétés permettent d'avoir une écriture plus naturelle. Une fois compilé cela se traduit par des méthodes bien évidemment.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 205
    Par défaut
    Ok, je pensais que les propriétés définissaient a la fois un attribut + getteur + setteur.
    Y'a-t-il vraiment des cas ou une propriété n'est pas associée a un attribut qui lui est unique? (si la propriété ne déclare pas d'attribut dans le même temps, c'est qu'il y a certainement une raison...mais laquelle?)

    Cependant, l'écriture suivante semble bien créer bien un attribut:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public int login { get; set; }
    Ça crée un attribut seulement si on ne met pas de code dans le getteur ni dans le setteur?

    Normal puisque la propriété est marquée comme privée.
    Je me rends compte que les modificateurs de portée devant get et set sont obligatoirement plus restrictifs que la portée de la propriété.

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par julien_iz Voir le message
    Ok, je pensais que les propriétés définissaient a la fois un attribut + getteur + setteur.
    Et non.

    Citation Envoyé par julien_iz Voir le message
    Cependant, l'écriture suivante semble bien créer bien un attribut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public int login { get; set; }
    Ça crée un attribut seulement si on ne met pas de code dans le getteur ni dans le setteur ?
    Oui, c'est une nouveauté du compilateur C# 3.0. Cela peut laisser penser que les propriétés définissent un attribut mais ce n'est pas vrai, car au final le compilateur générera un attribut.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 205
    Par défaut
    Merci pour les réponses

    Je trouve que c'est un peu laid tout ça....
    (ça aurait été plus simple que les propriétés "pondent" un attribut a chaque fois, pas seulement lorsqu'il n'y a pas de code dans le set ni dans le get)

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    public class Inutile {
     
       private Hashtable myTable;
     
       public int Count {
          get { return myTable == null ? 0 : myTable.Count; }
       }
     
    }
    Quel aurait été l'intérêt pour ce genre de code de créer "automatiquement" un attribut ?

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

Discussions similaires

  1. Méthodes get et set
    Par jcaspar dans le forum Langage
    Réponses: 6
    Dernier message: 12/04/2014, 22h48
  2. probleme avec les fonction get et set
    Par Invité dans le forum Flex
    Réponses: 0
    Dernier message: 23/01/2008, 14h44
  3. Get et Set du texte dans un wxStaticText
    Par Amybond dans le forum wxWidgets
    Réponses: 2
    Dernier message: 15/10/2007, 22h30
  4. Réponses: 3
    Dernier message: 12/02/2007, 14h21
  5. Créer les get et set des classes
    Par cameleon2002 dans le forum JBuilder
    Réponses: 3
    Dernier message: 17/09/2003, 21h03

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