Discussion: Probleme Get / Set [C#]

  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : mai 2009
    Messages : 63
    Points : 14
    Points
    14

    Par défaut Probleme Get / Set

    Bonjour à tous,

    Je débute en C# et j'ai un petit problème avec le get; set ;


    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
    16
    17
    18
    public class Email
    {
    private String from, fromName, to, subject, content, host, username, password, attachment;
        private bool bSsl;
        private int port;
     
        public String From { get; set; }
        public String FromName { get; set; }
        public String To { get; set; }
        public String Subject { get; set; }
        public String Content { get; set; }
        public String Host { get; set; }
        public String Username { get; set; }
        public String Password { get; set; }
        public String Attachment { get; set; }
        public bool BSsl { get; set; }
        public int Port{ get; set; }
    }
    Quand j'assigne une valeur a FromName cela devrais normalement mettre la valeur a fromName (sans majuscule et qui est en private) mais cela ne le fait pas. Quand je regarde le débuggeur c'est bien FromName a qui la valeur a étais assigner.

    Par contre si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public String FromName 
    { 
            get
            {
                return fromName;
            }
            set
            {
                fromName = value;
            }
    }
    Cela marche parfaitement.

    D'ou viens le probléme? Je ne vois pas bien l'intéret aussi de faire tous ca, mettre en public ne serais pas plus simple?

  2. #2
    Expert Confirmé
    Homme Profil pro
    Inscrit en
    février 2003
    Messages
    1 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations forums :
    Inscription : février 2003
    Messages : 1 761
    Points : 2 995
    Points
    2 995

    Par défaut

    quand tu utiles des propriétés auto-implémentés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      public String To { get; set; }
    il ne faut pas déclarer de variable, c'est le compilateur qui va gerer la variable interne.
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  3. #3
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : mai 2009
    Messages : 63
    Points : 14
    Points
    14

    Par défaut

    Citation Envoyé par BenoitM Voir le message
    quand tu utiles des propriétés auto-implémentés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      public String To { get; set; }
    il ne faut pas déclarer de variable, c'est le compilateur qui va gerer la variable interne.
    D'accord donc je vire tous les private, mais donc je ne comprends pas vraiment l'intérêt ( en tous cas maintenant cela marche ).

    Pourquoi utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public String To { get; set; }
    au lieu de :

    Les deux font exactement la même chose si je ne dis pas de bêtise.

  4. #4
    Expert Confirmé
    Homme Profil pro
    Inscrit en
    février 2003
    Messages
    1 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations forums :
    Inscription : février 2003
    Messages : 1 761
    Points : 2 995
    Points
    2 995

    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public String To { get; set; }
    est une propriété,
    est un attribut.
    Les deux font la même chose mais la propriété respecte la norme qui veut qu'on ne donne pas accès aux champs directement mais via des Getter/Setter (propriété). Et il est plus facile d'adopter les bonnes pratique au début même si ca n'a pas d'"utilité" que de devoir changer un code où tu ne les a pas appliquer

    Même si en .Net on a l'avantage d'avoir des proriétés et que changer un attribut en propriété passe souvent inapercu, tu cours moins de risque en creer directement une propriété plutot qu'un champ et surtout dans les autres language tu devais revoir tout ton code pour adapter ton code


    Si demain on te dit que le To doit être une adresse valide (max X caractère, avoir un @ dans l'adresse , il est plus facile de modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public String To { get; set; }
    que l'autre version
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

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

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