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 :

Intérêts des propriétés


Sujet :

C#

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Intérêts des propriétés
    Bonjour

    Venant du C++, je me demande quels sont les intérêts des propriétés par rapport rapport à des accesseurs/mutateurs fait à la main ?

    Perso, je ne trouve pas que cela soit plus rapide à écrire et que la lisibilité en soit augmentée)

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 291
    Points
    291
    Par défaut
    En effet, une propriété remplace les deux méthodes accesseurs/modifieurs. Le contenu sera le même c'est juste la forme qui change.

    Cependant l'utilisation de propriétés est indispensable pour faire du Binding par exemple. Je ne sais pas si elles sont indispensables dans d'autres cas, mais c'est au moins un exemple de l'intérêt des propriétés.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par jeanbonpuree Voir le message
    Perso, je ne trouve pas que cela soit plus rapide à écrire et que la lisibilité en soit augmentée)
    Au niveau de la déclaration, ça ne change effectivement pas grand chose, sinon que le getter et le setter sont clairement associés.

    Par contre, au niveau de l'utilisation, c'est plus intuitif d'écrire x.Name = "toto" que x.SetName("toto"), enfin je trouve...

    Ca a aussi l'avantage de clairement identifier la propriété en tant que telle, ce qui ne saute pas forcément aux yeux avec une paire de méthodes.

    Et en plus, depuis les propriétés auto-implémentées, tu peux écrire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public string Name { get; set; }
    Qui est en fait équivalent à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private string _name;
    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }
    Et là pour le coup ça fait gagner du temps...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par leSeb Voir le message
    ....
    Cependant l'utilisation de propriétés est indispensable pour faire du Binding par exemple. Je ne sais pas si elles sont indispensables dans d'autres cas, mais c'est au moins un exemple de l'intérêt des propriétés.
    Ah, ok, je vois. Une normalisation de présentation en quelques sorte.

    @tomlev
    Oui, je reconnais que dans le cas de l'auto implémentation c'est plus rapide mais hormis le get, faire du set sans un contrôle de valeurs ou autres vérifications, je dirais que (quitte à faire hurler les loups ), autant rendre le champs public.
    : patapé :

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Tu peux facilement changer l'accessibilité des accesseurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public string Name { get; private set; }
    ou même supprimer un des accesseurs

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par jeanbonpuree Voir le message
    Oui, je reconnais que dans le cas de l'auto implémentation c'est plus rapide mais hormis le get, faire du set sans un contrôle de valeurs ou autres vérifications, je dirais que (quitte à faire hurler les loups ), autant rendre le champs public.
    Non, justement. Bien sûr, fonctionnellement ça revient au même, mais il y a quand même de bonnes raisons d'utiliser une propriété plutôt qu'un champ
    - un champ, c'est la façon dont une donnée est stockée : c'est donc un détail d'implémentation, qui ne devrait donc pas être publiquement visible (encapsulation)
    - d'ailleurs une interface peut déclarer des propriétés, mais pas des champs
    - suppose que tu crées une librairie avec une classe C qui expose un champ X, et que des programmes utilisent ta librairie. Si un jour tu décides que tu as besoin de contrôler les valeurs assignées à X, tu es obligé de transformer le champ en propriété ; tu changes donc l'interface publique de la classe, et les programmes qui utilisaient la lib doivent donc être recompilés. Alors que si tu avais dès le départ utilisé une propriété, tu en aurais juste changé l'implémentation, sans toucher à l'interface publique ; dans ce cas tu aurais pu juste remplacer la DLL, sans toucher aux programmes qui en dépendent.

    Plus de détails dans cet article : http://tlevesque.developpez.com/tuto...t-importantes/

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    @youtpout978
    Oui, je reconnais une facilité et une rapidité de mise en oeuvre qui en plus est d'une certaine façon "standardisée" et qui incite à de la "bonne programmation".

    @tomlev
    Justement, c'est à la suite de la lecture de cet article dont tu mets le lien que je me suis décidé à poser ma question initiale (ma remarque sur le champ public était une boutade). Car en début d'article on peut lire:

    Il vaut mieux être clair sur le fait que cet article n'aborde pas la question de savoir si quelque chose doit être une méthode ou une propriété. Ce n'est pas toujours une décision évidente, et une discussion sur les mérites de l'une ou de l'autre serait intéressante mais détournerait l'attention de l'objet de cet article.
    Et en fait, ma question portait là-dessus et je vais la reformuler autrement:
    Si au lieu d'écrire mon propre mutateur pour affecter une valeur à mon champ privé, j'utilise une propriété, quelles différences y aura t-il dans le code et son traitement (le code sera t-il plus optimisé, sera t-il d'office "inline"...)
    Je voulais savoir aussi en gros, par comparaison avec le C++, ce qui avait conduit et justifié à ce changement.
    C'est juste par curiosité.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Points : 502
    Points
    502
    Par défaut
    Citation Envoyé par jeanbonpuree Voir le message

    Et en fait, ma question portait là-dessus et je vais la reformuler autrement:
    Si au lieu d'écrire mon propre mutateur pour affecter une valeur à mon champ privé, j'utilise une propriété, quelles différences y aura t-il dans le code et son traitement (le code sera t-il plus optimisé, sera t-il d'office "inline"...)
    Je voulais savoir aussi en gros, par comparaison avec le C++, ce qui avait conduit et justifié à ce changement.
    C'est juste par curiosité.
    La relation entre le binaire d'exécution et le code source est différente. En C++, le code est compilé. En C#, le code est d'abord interprété, puis compilé.

    Utiliser des facilités ou du code plus basique devrait en principe générer le même code compilé, au même titre que la presque totalité du code vb.net va générer le même binaire que son équivalent C#.

    Et je trouve ironique que tu mentionnes C++ et les facilités alors que le nom même du langage est le porte étendard d'une facilité: l'incrémenteur '++'. Que tu écrives 'x = x + 1;' ou 'x++', ça va donner le même binaire, non?

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Babyneedle Voir le message
    En C#, le code est d'abord interprété, puis compilé.
    Ah bon ?
    C'est plutôt le contraire ; il est d'abord compilé en langage intermédiaire (IL, similaire dans le principe au bytecode Java), et ce code IL est ensuite "interprété" par le CLR (machine virtuelle). En réalité ce n'est pas tout à fait de l'interprétation, c'est un peu plus subtil que ça : lors de la première exécution d'une méthode, celle-ci est compilé en code natif directement exécutable par le CPU. Donc en gros, c'est plutôt une double compilation.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    @Babyneedle
    Utiliser des facilités ou du code plus basique devrait en principe générer le même code compilé,
    Ok, donc, c'est en fait les propriétés sont justes une commodité d'écriture qui a poussé les concepteurs à introduire cette notion.

    au même titre que la presque totalité du code vb.net va générer le même binaire que son équivalent C#.
    Ah oui? Ok. Je ne pensais pas de prime abord que pour la même fonctionnalité, le code intermédiaire généré à partir de vb serait le même que celui généré à partir de C#.

    Et je trouve ironique que tu mentionnes C++ et les facilités

    Euh..non là je ne comprends pas. Je n'ai pas parlé des facilités j'ai juste mentionné le C++ comme le langage auquel je me référais pour, je me cite: "Je voulais savoir aussi en gros, par comparaison avec le C++, ce qui avait conduit et justifié à ce changement." En tout cas, pas d'ironie voulue de ma part.
    Que tu écrives 'x = x + 1;' ou 'x++', ça va donner le même binaire, non?
    J'avoue que je n'ai jamais été voir le code objet généré mais je suppute que oui, encore que le résultat final doit dépendre du compilateur et de ses options d'optimisations.

  11. #11
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Ah mon avis l'avantage se situe au niveau du databinding et de la lecture du code.

    Le fait d'encapsuler de cette manière te permet de donner l'impression de manipuler des variables alors que derrière tu as des contrôles, ça rend le code un peu moins lourd en lecture.

    Ensuite d'un langage à un autre (objet), le principe d'encapsulation reste le même.

    Et c'est moins le bordel quand tu fais de la reflexion

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par jouana Voir le message
    Ah mon avis l'avantage se situe au niveau du databinding et de la lecture du code.

    Le fait d'encapsuler de cette manière te permet de donner l'impression de manipuler des variables alors que derrière tu as des contrôles, ça rend le code un peu moins lourd en lecture.

    Ensuite d'un langage à un autre (objet), le principe d'encapsulation reste le même.

    Et c'est moins le bordel quand tu fais de la reflection
    Effectivement, leSeb m'a parlé de cela:
    Cependant l'utilisation de propriétés est indispensable pour faire du Binding par exemple. Je ne sais pas si elles sont indispensables dans d'autres cas, mais c'est au moins un exemple de l'intérêt des propriétés.
    .

    Je jetterais un oeil à tout cela. Merci.

  13. #13
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Quand je parle de reflexion, je parle de ça http://msdn.microsoft.com/fr-fr/libr...(v=vs.90).aspx

    Pour ce que ça intéresse

  14. #14
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Si vous avez l'occasion de lire CLR via C# (que je conseille), vous allez voir Jeffrey Richter démolir les propriétés. Je ne suis pas trop d'accord avec lui ce sur point là, mais c’est toujours intéressant de lire un avis différent. Surtout quand ça vient d'une bête en C#.
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

Discussions similaires

  1. recopie des propriétés d'un composant
    Par pitounette dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/02/2004, 10h40
  2. Comment cacher des propriétés dans un nouvel objet ?
    Par Pedro dans le forum Composants VCL
    Réponses: 2
    Dernier message: 22/10/2003, 18h53
  3. ouverture de la fenêtre des propriétés afffichage
    Par Mercilius dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 26/03/2003, 17h07
  4. Quel est l'intérêt des Services Web ??
    Par silvermoon dans le forum Débats sur le développement - Le Best Of
    Réponses: 19
    Dernier message: 12/02/2003, 22h28
  5. [Technique] Intérêt des index
    Par ddams dans le forum Décisions SGBD
    Réponses: 10
    Dernier message: 04/11/2002, 15h11

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