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; set;} ou pas !?


Sujet :

C#

Vue hybride

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Par défaut {get; set;} ou pas !?
    Salut a tous !

    J'aimerais comprendre a quoi sert reelement les ascesseurs get et set ? Car mettre une variable en public revient a faire la même chose, je m'explique :

    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
     
    public class Voiture
    {
        public int Vitesse { get; set; }
     
        public Voiture()
        {
               Vitesse = 5;
        }
     
        public void Rouler()
        {
              MessageBox.Show("Vitesse : " + Vitesse)
        }
    }

    Et j'appelle comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Form load...
    {
          Voiture test = new Voiture();
          test.Rouler();
     
          test.Vitesse = 50;
          test.Rouler();
     
    }
    Voila donc avec ou sans le get est ca fait exactement la même chose...

    On m'explique ? ^^


    Merci !

  2. #2
    Membre émérite Avatar de Momoth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 318
    Par défaut
    Bonjour,

    En fait si le résultat est le même (tu accède a la propriété), c'est pas exactement ça. Passer par des accesseurs, c'est acceder à la propriété mais dans tous les cas en passant par une méthode intermédiaire. Le résultat est sensiblement le même si tu ne fait rien d'autre que les GET et SET de base, mais si tu rajoutes du code par exemple dans un GET, c'est du code qui sera appelé a chaque fois que tu voudras accéder a la propriété.

    Tu peux alors faire des tests sur l'utilisateur pour gérer des permissions par exemple, etc.

    Bon en général, on fait surtout des accesseurs pour la bonne pratique, car si on a des propriétés en public et d'autres en privés qui ont des accesseurs (qui ont vraiment un rôle à jouer), c'est plus facile de s'y retrouver. Pour plus d'informations

    Bonne journée

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Si je ne m'abuse, si tu utilises la Reflection il faut les get/set sinon tu ne verra pas les properties. Comme un binding qui ne fonctionne pas...

  4. #4
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    C'est exactement la même chose sauf que l'ajout d'une propriété permet par exemple :
    * De correspondre à une propriété d'interface (limite de dotnet).
    * De correspondre à un champ XML pour XMLSerializer (limite du Serializer).
    * D'être utilisable pour la liaison de données (binding) sous XAML (limite de WPF/Xaml).
    * Etc.

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    une variable stocke une valeur, pas une propriété
    quand on écrit une propriété avec juste get et set, une variable privée sera implicitement ajoutée au moment de la compilation

    et une propriété permet d'apporter une multitude de fonctionnements qu'il est impossible de faire avec une variable, certains ont déjà été cités, il y aussi :
    - faire une sauvegarde dans le set ; le set signifie que la valeur change, au peut au passage lancer une sauvegarde en base ou autre
    - lever un event ; permet d'avertir le reste de l'appli que la valeur a changé
    - faire une vérification sur la valeur ; par exemple si tu as une propriété qui reflète une saisie et que tu veux un nombre entre 0 et 100 tu peux alors tester dans le set si c'est le cas, sinon tu throw une exception sans changer la valeur stockée
    - faire une initialisation tardive dans le get ; parfois quand on créer des tas d'instances, créer toutes les variables prend du temps et peut etre inutile, dans ce cas dans le get on vérifie que la variable est créée, si elle ne l'est pas on l'instancie
    etc...

    et il y a aussi les conventions, généralement une variable publique on se l'interdit, et on laisse ca aux propriétés
    ca permet de différencier les variables et paramétrages local à la classe des choses qui sont des paramètres publiques
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Par défaut
    Tout d'abord merci a vous tous pour vos réponses clair et précises !

    Volontairement je ne vais pas mettre Résolu au cas ou quelqu'un voudrait rajouter quelque chose !



    Ha si par contre jai une petite question, étant donner la convention, comme dois je déclarer un ascesseur ?
    Un prof d'info m'a dit que déclarer comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public string maVar { get; set; }
    Ne respectait pas la convention parce que justement c'est en public...

    Donc sa façon a lui est de le mettre en private et de faire les deux fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private string maVar;
    public string FonctionGet{......}
    public string FonctionSet{......}
    Pour moi, ayant chercher un peu sur le net, j'ai compris que déclarer de façon direct (comme dans mon premier exemple) était une façon de faire un getset standard, donc on affecte et on recupere simplement.
    Et ensuite si on voulait ajouter (par exemple), ou faire des choses intermédiaire, dans une valeur dans ma propriété, et bien il fallait que je le fasse en entier (donc en déclarant les fonctions).

    Je me suis peut être mal exprimé...

    Mais si vous n'en voyez aucun inconvénient, je veux bien savoir qu'elle est la différence entre ces deux déclarations !

    Merci encore !

Discussions similaires

  1. Problèmes sur Get Set d'une variable.
    Par Mattk dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/04/2007, 01h43
  2. get set modifier valeur
    Par jcaspar dans le forum Langage
    Réponses: 1
    Dernier message: 11/03/2007, 01h36
  3. fonction générique pour get set et change
    Par tretsois dans le forum C++
    Réponses: 9
    Dernier message: 18/02/2007, 18h28
  4. Réponses: 7
    Dernier message: 23/01/2007, 11h08
  5. [VB6]Property Get/Set avec groupe de contrôles
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 24/01/2006, 12h09

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