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 :

Propriété ou attribut ? Pourquoi ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut Propriété ou attribut ? Pourquoi ?
    Bonjour,

    Déjà, pour être compréhensible, afin que tout le monde sache de quoi je parle (d'un article à l'autre, j'ai trouvé différents noms aux principes dont je parle, donc je préfère que tout le monde soit d'accord).

    Attribut : "variable" de l'objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class test
    {
        public int MonAttribut;
    }
    Propriété : couple de "méthodes" dédiées à l'accès d'un attribut (généralement privé) :
    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
     
    class test
    {
        private int _monAttributPrivé;
     
        public int MaPropriété
        {
            get
            {
                return _monAttributPrivé;
            }
            set
            {
                _monAttributPrivé = value;
            }
        }
    }
    Les propriétés sont la suite logique des méthodes "SetAttribut()" et GetAttribut()" qu'on trouvait dans le code C++ autrefois.

    Maintenant que les définitions sont données, les questions :

    1) J'ai bon niveau désignation des deux concepts ?

    2) J'ai bien compris la différence entre les deux, même si elle est parfois subtile :
    - Dans l'exemple ci-dessus, je ne vois absolument aucune différence entre les deux concepts
    - L'utilisation de "readonly" sur un attribut permet de reproduire le comportement une propriété avec uniquement un get.
    - Ne reste donc que le cas des propriété avec uniquement un set, ainsi que celles avec des actions au niveau du set et/ou get
    => Pourtant, je vois de plus en plus de personnes écrire des propriétés avec cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class test
    {
        int MaPropriété { get; set; }
    }
    Et là, je reste pantois.

    Quel est l'intérêt d'utiliser une propriété plutôt qu'un attribut ? Puisqu'on n'a pas de corps aux get/set, et qu'en plus il n'y a pas d'attribut privé caché derrière (et donc un bordel pas possible le jour où on décide de mettre un corps aux get/set).

    En effet, par exemple, les propriétés me servent habitellement à faire ce genre de choses :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    class Sequence
    {
        int _currentValue = 1;
     
        public int NextValue
        {
            get
            {
                if (_currentValue == int.MaxValue) throw new Exception("Dépacement de capacité dans la séquence...");
                return _currentValue++;
            }
        }
     
        public int CurrentValue
        {
            get
            {
                return _currentValue;
            }
            set
            {
                if (value <= 0) throw new Exception("Une séquence ne fonctionne que sur l'interval [1,∞[");
                _currentValue = value;
            }
        }
    }
    C'est à dire avec une valeur ajoutée dans le get/set.

    A quoi sert donc cette nouvelle syntaxe {get;set;}
    => Si par hasard un jour on a envie de faire une Propriété au lieu d'un attribut ?
    Vu le changement de code nécessaire pour utiliser un attribut privé partout où les valeurs ajoutées au get/set ne devront pas être exploitées, je ne vois pas trop ce que ça change... D'autant qu'au niveau de l'appel dans le code, propriété ou attribut, c'est rigoureusement identique.

    Quel wagon ais-je raté ?

  2. #2
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Salut.
    Citation Envoyé par StringBuilder Voir le message
    1) J'ai bon niveau désignation des deux concepts ?
    Non, et du coup ça te mélange les pinceaux pour la suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private int myField; // ceci est un champ
     
    [Serializable] // ceci est un attribut
    public int MyProperty { get; set; } // ceci est une propriété
    Ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private int myProperty; 
    public int MyProperty {
        get { return this.myProperty; }
        set { this.myProperty = value; }
    }
    Et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public int MyProperty { get; set; }
    C'est exactement la même chose, seulement la deuxième version est autorisée depuis je ne sais plus quelle version du FW (3.0 je crois), c'est une forme de sucre syntaxique .

    L'utilisation de la première écriture reste utile lorsque tu as un truc plus complexe à faire dans ton get et/ou set. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private int myProperty; 
    public int MyProperty {
        get { return this.myProperty; }
        set { this.myProperty = value < 0 ? 0 : value; }
    }
    En espérant que ça t'aide

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    A quoi sert donc cette nouvelle syntaxe {get;set;}
    Simplement a être plus rapide

    Le but est justement d'utiliser les bonnes pratiques.
    Le jour ou tu devras changer pour X raison ta propriété , tu pourras le faire facilement
    Si tu avais utilisé un attributs tu n'aurais pas pu

    Si par hasard un jour on a envie de faire une Propriété au lieu d'un attribut ?
    mais get;set; est une Propriété et non un champ

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    Personnellement je préfères me forcer à utiliser la "syntaxe" complète càd :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private int myProperty; 
    public int MyProperty {
        get { return this.myProperty; }
        set { this.myProperty = value; }
    }
    Ce qui se fait de toute façon très rapidement via un snippet.

    Au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public int MyProperty { get; set; }
    Car comme l'as souligné en autre StringBuilder , cette manière de l'écrire demande tout simplement moins de temps de modification lorsque l'on a besoin d'implémenter des get/set conditionnés.

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Ce que je veux dire c'est que mettons la classe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class Carre1
    {
        public double Cote;
        public double Surface;
        public double Perimetre;
     
        public Carre(double cote)
        {
            Cote = cote;
            Surface = Math.Pow(double , 2D);
            Perimetre = cote * 4D;
        }
    }
    Et la classe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class Carre2
    {
        public double Cote {get;set}
        public double Surface {get;set}
        public double Perimetre {get;set}
     
        public Carre(double cote)
        {
            Cote = cote;
            Surface = Math.Pow(cote, 2D);
            Petimetre = cote * 4D;
        }
    }
    Maintenant, j'ai pour instruction de faire en sorte que si Cote, Surface ou Perimetre change, il faut que ça impacte immédiatement les deux autres propriétés.

    Je vais donc faire :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    class Carre3
    {
        private double _cote;
     
        public double Cote
        {
            get
            {
                return _cote;
            }
            set
            {
                _cote = value;
            }
        }
     
        public double Surface
        {
            get
            {
                return Math.Pow(_cote, 2f);
            }
            set
            {
                _cote = Math.Sqrt(_cote);
            }
        }
     
        public double Perimetre
        {
            get
            {
                return _cote * 4D;
            }
            set
            {
                _cote = value / 4D;
            }
        }
     
        public Carre(double cote)
        {
            _cote = cote;
        }
    }
    Comme on le voit, on a absolument le même nombre de lignes qui changent, et exactement la même structure publique.

    Du coup je ne vois pas en quoi remplacer un champ par une propriété avec un get/set vide change quoique ce soit. Éventuellement, si on met un corps qui utilise une variable privée, ok, ça économise un peu de code par la suite. Mais avec un get/set vide, je ne vois pas du tout.

  6. #6
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Bonjour,

    Champs

    Propriétés

    tu peux aussi lever des évèvènement au changement de valeur d'une propriété etc..., mais pas directement avec un champs.

  7. #7
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sisqo60 Voir le message
    Bonjour,

    Champs

    Propriétés

    tu peux aussi lever des évèvènement au changement de valeur d'une propriété etc..., mais pas directement avec un champs.
    Nan mais ça, je sais.

    La question que je pose concerne justement l'utilisation de Propriété auto-implémentée : qu'est-ce que ça peut apporter par rapport à l'utilisation d'un champ ?
    Mise à part qu'une personne a dit un jour "les champs ne devraient jamais être public, il faut utiliser des propriétés pour pouvoir valider les valeurs mise à jour à l'extérieur de la classe".
    => Dans ce cas, si on utilise des propriétés pour "pouvoir" valider les valeurs, je ne vois pas pourquoi on autorise un set vide. (idem pour le get)

  8. #8
    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
    Citation Envoyé par StringBuilder Voir le message
    Attribut : "variable" de l'objet :
    Propriété : couple de "méthodes" dédiées à l'accès d'un attribut (généralement privé)
    1) J'ai bon niveau désignation des deux concepts ?
    Les bonnes terminologies en C# sont "variable membre" et "propriété". Les attributs désignent autre chose (des métadonnées).

    Quant à savoir si un attribut au sens UML correspond uniquement à une variable, ou à une variable ou une propriété indifféremment, c'est un autre débat dans lequel je ne plongerai pas.

    - L'utilisation de "readonly" sur un attribut permet de reproduire le comportement une propriété avec uniquement un get.
    Du point de vue externe à la classe, oui. Du point de vue interne, non, puisque la variable readonly ne peut être assignée que par le constructeur alors que la variable sous-jacente à une propriété readonly pourra l'être n'importe quand.
    Cela affecte d'ailleurs les possibilités d'optimisation par le compilateur puisqu'il ne peut pas savoir si une propriété sans setter aura malgré tout une valeur constante.

    La question que je pose concerne justement l'utilisation de Propriété auto-implémentée : qu'est-ce que ça peut apporter par rapport à l'utilisation d'un champ ?
    Pour le reste... Il se trouve qu'en C# l'usage est d'avoir rarement des champs publics et de leur préférer des propriétés publiques à la place, vraisemblablement pour des raisons esthétiques. On peut choisir de procéder différemment. Cela dit deux arguments en faveur de l'usage systématique des propriétés publiques au lieu de champs publics :
    * Certaines classes utilisant la réflexion ne considèrent que les propriétés (sérialisation XML par ex, bindings WPF dans les premières versions, etc) ou que les champs (sérialisation binaire).
    * S'il est tout à fait possible de transformer un champ en propriété sans gêner la compilation, cela affectera les assemblys dépendantes qui n'auront pas été recompilées et évidemment tout procédé utilisant la réflexion. A contrario, si dès le départ on avait utilisé une propriété, on pourrait la modifier sans subir ces conséquences.


    Puisqu'on n'a pas de corps aux get/set, et qu'en plus il n'y a pas d'attribut privé caché derrière (et donc un bordel pas possible le jour où on décide de mettre un corps aux get/set).
    Il y a forcément une variable cachée derrière une propriété auto-implémentée, elle est générée par le compilateur.

  9. #9
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Merci DonQuiche, les deux * sont exactement la réponse que j'attendais.

    Je ne me suis en effet jamais penché sur ces fonctionnalités de .NET
    Mais ok, je prends bien notre et à l'avenir je préférerai utiliser des propriétés systématiquement.

    En revanche, je pense passer systématiquement par un champ privé plutôt qu'un get/set vide, que je trouve sale et inutile.

  10. #10
    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
    Content d'avoir satisfait tes interrogations.

    Citation Envoyé par StringBuilder Voir le message
    En revanche, je pense passer systématiquement par un champ privé plutôt qu'un get/set vide, que je trouve sale et inutile.
    Question de préférences, tu n'es pas le seul dans ce cas.
    Cela dit, personnellement j'aime bien entasser les propriétés triviales en un gros bloc compact comme je le ferais pour des champs et les propriétés auto-implémentées font merveille pour ça.

  11. #11
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Il y a forcément une variable cachée derrière une propriété auto-implémentée, elle est générée par le compilateur.
    Oui, mais vu qu'on ne peut pas la récupérer dans le code, l'intérêt est plutôt limité.

    Si par exemple, le fait de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Test
    {
       public int propriete1 {get;set;}
       public string propriete2 {get;set;}
    }
    Générait automatiquement mettons une structure "BackingFields" privée comme suit :

    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
    class Test
    {
       public int propriete1 {get;set;}
       public string propriete2 {get;set;}
    
       
       TestBackingFields _backingFields;
    
       struct TextBackingFields
       {
          int propriete1;
          string propriete2;
       }
       
    }
    Qu'on puisse ensuite appeler :
    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
    19
    20
     
    class Test
    {
       public int propriete1 {get;set;}
       public string propriete2 {get;set;}
     
       TestBackingFields _backingFields;
     
       struct TextBackingFields
       {
          int propriete1;
          string propriete2;
       }
     
       public void FaitUnTruc(int a, string b)
       {
          _backingFields.propriete1 = a;
          _backingFields.propriete2 = b;
       }
    }
    => Là, oui, je serais parfaitement convaincu de l'utilité des propriétés auto-implémentées. Mais là, je ne vois pas trop l'intérêt, mise à part faire croire au développeur qu'il développe proprement "ouais, t'as vu, j'ai plus un seul champ public !" alors que le programme est toujours autant exposé aux bugs à cause de l'absence de contrôle dans les accesseurs.

  12. #12
    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
    Citation Envoyé par StringBuilder Voir le message
    Si par exemple, le fait de faire :
    Générait automatiquement mettons une structure "BackingFields" privée comme suit :
    Mais ça n'aurait aucun intérêt. Sones-tu aux performances ? Mais de toute façon le JIT supprimera l'appel à la propriété pour y substituer un appel au champ derrière.

    Le seul cas où on aurait vraiment besoin du champ sous-jacent, ce serait parce qu'on a besoin de son adresse (via ref, , pour une bidouille unsafe ou parce que la propriété renvoie une structure mutable dont on voudrait modifier un champ : "MaPropriétéQuiRenvoieUneStructure.x = 10" ne compilera pas).

  13. #13
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Mais ça n'aurait aucun intérêt.
    Ben si, le jour où j'implémente manuellement mes accesseurs, alors j'ai déjà mon backfield près à l'emploi, et que j'ai déjà utilisé dans le reste de ma classe.

  14. #14
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Il se trouve qu'en C# l'usage est d'avoir rarement des champs publics et de leur préférer des propriétés publiques à la place,
    Non non pas en C# mais en POO
    Les propritétés (get/set) sont une récommandation(obligation?) depuis longtemps que se soit en c++, java

    L'utilité c'est que tu n'est jamais sur que tu ne devrais pas passer par une propriété plutot qu'un champ.
    Si tu te rends compte X jours/mois après que tu ne dois pas accepter de somme négative, de champ plus long que X caractères, tu devras revoir tout ton programme alors que si tu avais utilisé des propriétés ceci aurait eu nettement moins d'impact

    Donc pour eviter de se poser la question on utilise toujours des propriétés même si c'est (souvent) inutile.
    Il vaut mieux un exces de prudence que l'inverse.

  15. #15
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    Si tu te rends compte X jours/mois après que tu ne dois pas accepter de somme négative, de champ plus long que X caractères, tu devras revoir tout ton programme alors que si tu avais utilisé des propriétés ceci aurait eu nettement moins d'impact
    Ça c'est pas vrai : transformer un champ en propriété, ça ne prends pas plus de temps que transformer une propriété auto-implémentée en propriété avec une implémentation manuelle.

    Donc OK si t'as de la réflexion et de la sérialisation automatique, ce qui reste tout de même marginal, mais pour 99% des gens, t'as que quelques lignes à vérifier au sein de la classe dont le champ est transformé en méthode qu'il faut vérifier.
    Le plus compliqué étant de déterminer si dans une méthode on doit utiliser la propriété ou le backfield : d'un point de vues performances, le backfield sera mieux, mais d'un point de vue fonctionnel, ça peut être très différent (si les accesseur font des actions en plus de simples contrôles)

  16. #16
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Ça c'est pas vrai : transformer un champ en propriété, ça ne prends pas plus de temps que transformer une propriété auto-implémentée en propriété avec une implémentation manuelle.
    Euh je parle de la différence entre un champ directement accessible et d'un champ encapsuler via une property(get/set).
    Et c'est parce que tu en C# que cette transformation n'a que peu d'impact.
    En c++ tu dois creer des Getter et Setter (GetChamp1, SetChamp1)pour pouvoir encapsuler tes champs

    Et il n'y aucune différence entre une Property et une Property auto implémenté. C'est juste pour épargner les petites mains du programmeur qui n'aime pas utilisé ca souris ou qui n'a pas trouvé le snippet :p

    Donc je vois pas pourquoi tant de débat autour du sujet Property ou Property auto implémenté.C'est exatement la meme chose

    Si tu n'aimes pas la synthaxe, suffit de pas l'utiliser

  17. #17
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Ben vu que c'est autant utilisé, j'imaginais qu'il y avait un avantage.

    Mais je n'en vois pas, mise à part changer l'aspect des membres de la classe dans l'explorateur de classes

    En revanche, je vais tâcher d'utiliser systématiquement des propriété dorénavant, chose que je ne faisais que lorsqu'il y avait une utilité fonctionnelle (ou technique).

Discussions similaires

  1. Propriété vs attribut de classe
    Par Alec6 dans le forum UML
    Réponses: 1
    Dernier message: 30/06/2010, 08h11
  2. Réponses: 14
    Dernier message: 10/03/2009, 16h31
  3. Réponses: 10
    Dernier message: 03/03/2009, 00h19
  4. [Castor] Accéder à une propriété d'un attribut
    Par neuromencien dans le forum Persistance des données
    Réponses: 1
    Dernier message: 10/08/2007, 17h44
  5. Attribution d'une propriété ou méthode
    Par kgb1917 dans le forum Access
    Réponses: 12
    Dernier message: 25/05/2007, 15h13

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