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 :

[debutant C#] getter/setter


Sujet :

C#

  1. #1
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Points : 109
    Points
    109
    Par défaut [debutant C#] getter/setter
    Bonjour a tous,

    je suis desole d'avance pour ma question bete et surement deja repondu des centaines de fois. J'ai cherche mais malheureusement pas trouver la reponse que je cherche.

    J'ai compris le principe des mots cle get/set etc, mais il y a vraiment un truc qui me tracasse et je n'arrive pas bien a comprendre la nuance entre 2 facons d'ecrire un code. Je suis habitue a developper en C++ et je ne vois pas du tout la difference entre le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public int myint {get; set;} //C# style
    et le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public int myint; //C++ style

    Ma question est simple est ce qu'il y a une difference ou est ce que c'est rigoureusement la meme chose ? ca me tracasse car je me dis qu'il y a peut etre une subtilite que je rate...

    En effet avec ou sans get/set dans les 2 cas il me semble qu'on peut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    obj.myint = 42;
    int tmp = obj.myint;
    ou je me trompe ?

    d'avance merci pour vos eclaircissements,

    Oniric.

  2. #2
    Expert éminent
    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 : 46
    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
    Points : 7 660
    Points
    7 660
    Par défaut
    En C#
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public int MyInt {get; set;}
    Représente une propriété implémentée automatiquement. Le code ci-dessus est équivalent au code ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private int _myInt;
     
    public int MyInt
    {
        get
        {
            return _myInt;
        } 
        set
        {
            _myInt = value;
        }
    }
    On déclare donc un champ privé et le nécessaire pour accéder à ce champ depuis l'extérieur (principe d'encapsulation).

  3. #3
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    A mon avis un mutateur sans code de contrôle ne sert à rien.
    un champ public aura le même effet et le fait de l'emballer dans une propriété qui ne fait rien n'apporte rien.

    L'encapsulation, telle que décrite dans les canons de l'objet, ne permet JAMAIS d'accéder aux attributs d'un objet sauf en utilisant des méthodes.

    La présence de propriété public est donc une facilité, ou une voie de contournement...

    Nous somme donc ORIENTE OBJET

    là où les propriété prennent tout leur sens, c'est lorsque le mutateur effectue un certains nombre de contrôles/traitements avant d'affecter la valeur à la variable.

  4. #4
    Expert éminent
    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 : 46
    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
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par kheironn Voir le message
    un champ public aura le même effet et le fait de l'emballer dans une propriété qui ne fait rien n'apporte rien.
    Un champ public est une bonne pratique pour les constantes (DateTime.MinValue par exemple). Sinon, même si la propriété n'ajoute pas de code de contrôle il vaut mieux en faire une. Plus simple ensuite si on doit changer l'implémentation de la propriété car il ne sera pas nécessaire de recompiler le code appelant.

    Après, c'est juste une recommandation de codage qui n'oblige à rien. Mais si les recommandations existent ce n'est pas que pour faire joli en général

  5. #5
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    De toutes façons, comme je l'ai dit, la propriété est une facilité... donc depuis VS2008 prop + tab est plus rapide à utiliser

    sinon, comme tout développeur, je pense, j'utilise les propriétés

  6. #6
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par kheironn Voir le message
    A mon avis un mutateur sans code de contrôle ne sert à rien.
    un champ public aura le même effet et le fait de l'emballer dans une propriété qui ne fait rien n'apporte rien.

    L'encapsulation, telle que décrite dans les canons de l'objet, ne permet JAMAIS d'accéder aux attributs d'un objet sauf en utilisant des méthodes.

    La présence de propriété public est donc une facilité, ou une voie de contournement...

    Nous somme donc ORIENTE OBJET

    là où les propriété prennent tout leur sens, c'est lorsque le mutateur effectue un certains nombre de contrôles/traitements avant d'affecter la valeur à la variable.
    ok merci beaucoup de vos reponses, c'etait ce que je pensais mais j'avais un doute et je voulais etre sur de ne pas rater une subtilite.

    merci de vos reponses

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

Discussions similaires

  1. [VB.NET] Génération automatique Property (getter / setter)
    Par Husqvarna dans le forum Windows Forms
    Réponses: 7
    Dernier message: 23/07/2020, 11h55
  2. [POO] Pourquoi recourir aux Getters/Setters ?
    Par Wormus dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 18/01/2008, 18h38
  3. [NetBeans] generation automatique getters/setters
    Par kenito dans le forum NetBeans
    Réponses: 1
    Dernier message: 12/05/2006, 14h37
  4. [Info]générer automatiquement les getters / setters
    Par lr dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 01/02/2005, 10h14
  5. configuration getter & setter
    Par otb82 dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 15/10/2003, 15h53

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