Déclaration d'attribut de classe: private vs public
Quels sont les avantages de la définition d'un attribut privé au lieu d'un attribut public? Pourquoi devrais-je faire le travail supplémentaire de création de méthodes d'accès et de modification des soldats attributs si je peux les rendre publiques?
source d'informationauteur brsunli
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez des getters/setters, vous pouvez exécuter la logique lors de modifications ou d'accès. Vous pourriez valider la saisie, au lieu de supposer qu'il est toujours correct. Vous pouvez suivre combien de fois la valeur est extraite.
La plupart de tous, il est bon de conception. Il vous donne, le développeur de la classe, plus de contrôle sur la façon dont il est utilisé et une plus grande capacité à empêcher la mauvaise utilisation, l'abus, ou tout simplement quelqu'un qui fait quelque chose de mal.
Dans le court terme, il n'y a rien, d'autres que de faire de la POO puristes malheureux.
(Je suppose que tu veux dire exposer les propriétés qui serait autrement utiliser des getters/setters - de toute évidence, il y a une grande différence si vous laissez TOUS vos attributs publics).
Dans le long terme, il y a quelques très bonnes raisons pour le faire.
Tout d'abord, elle permet de valider la saisie à la source au lieu de plus tard de retour-le suivi de l'origine avec une combinaison de matériel, les points d'arrêt et noir de la magie.
E. g.
Il vous permet également de modifier ultérieurement le comportement de votre objet sans de refactoriser le code client.
E. g.
Parce que vous doit toujours s'efforcer de défendre la mise en œuvre de l'interface. Si vous faites un attribut public, vous laisser le client sait comment votre application pour que l'attribut est.
Ce qui vous lie à garder non seulement l'interface, mais aussi la mise en œuvre.
Aussi, vous pouvez effectuer d'autres choses intelligentes comme la validation, le contrôle d'accès, comptabilité, si vous utilisez une méthode. Si vous faites un attribut public, vous avez beaucoup moins de contrôle sur ce que le client peut faire avec l'attribut
Principalement en raison de OO concept d'encapsulation. À l'aide de privé vous encapsuler l'accès à votre variable d'objet en gardant le contrôle de l'état de l'objet. Ne permettant pas à des objets externes pour modifier l'état de votre objet que vous n'êtes pas au courant.
Un exemple simple serait une Poche d'objet.
Et maintenant, imaginez une autre classe comme ci-dessous:
Sûrement, c'est un exemple simple. cependant cela montre combien il est important d'avoir le contrôle de l'accès à votre catégorie champs/attributs.
Imaginez de plus en plus complexe de l'objet avec beaucoup plus compliqué que le contrôle de l'état. L'Encapsulation permet l'abstraction et de la cohérence de l'objet de mieux.
Si vous créez une méthode d'accès, vous séparer de mise en œuvre de l'interface.
Un attribut privé vous offre un niveau de protection des utilisateurs de votre classe, pour cet attribut. Si vous utilisez un attribut public, vous aurez besoin d'ajouter en plus de la logique de test pour les valeurs non valides jusqu'à l'avant, qui peut être plus de travail, ainsi que plus gourmand en ressources.
Public attributs aussi "fouillis" de l'interface. Le moins de public attributs de vous présenter, le plus "propre" et plus facile votre objet sera de travailler avec. Ayant certains attributs privé vous donne la flexibilité tout en offrant une facilité d'utilisation qui ne serait autrement pas être là.
En C# c'est idiomatiques. Cela signifie que les champs publics serait surprenant, et d'autres personnes de prendre un peu plus de temps pour comprendre votre code.
La raison pour laquelle il est idiomatiques a à voir avec les autres explications les gens sont généreux, mais le fait qu'il est idiomatique qui signifie que vous devriez préférer une propriété sur un terrain public, sauf si il y a une raison impérieuse d'utiliser un champ.
Vous utilisez généralement Privé déclarations pour les champs que vous souhaitez isoler au sein de votre logique du programme, SEULEMENT si vous le jugez nécessaire.
Des déclarations publiques de vous donner plus de contrôle de votre propre programme de flux; vous pouvez modifier les champs que vous le souhaitez. Vous êtes l'homme de la maison.
Alors, pourquoi la plupart des gens, spontanément, de répondre avec un GRAND OUI à Privé déclarations?
Parce que:
Ligne de fond est étonnamment "commercial"!! Si vous "vendre", puis aller en privé, sinon faites ce que vous voulez.
Vous êtes mieux dans le long terme, si tous les attributs sont privés. Qui ne comprend pas en utilisant les méthodes de lecture. Si vous avez accès à des attributs des objets alors que vous êtes briser l'encapsulation, et ne sont pas vraiment en train de faire de la programmation orientée objet. À ce moment, la plupart de la raison de la construction d'une classe a été gaspillé. Pourquoi construire un château à protéger contre les intrus, puis laisser toutes les portes ouvertes? Ou (avec des getters) est toujours la bienvenue intrus sur demande.
Les méthodes de la "Loi de Déméter" et "Dire de ne pas demander" a été montré pour réduire bug taux dans le code de production. En utilisant les attributs de ne pas faire orientée objet puristes malheureux, il va tout simplement les éviter à l'aide de votre code.
Dites à vos objets de quoi faire avec leurs attributs, ne demandez pas pour les valeurs, de les manipuler et de les réécrire. Ce serait comme prendre un chien pour une promenade et puis ramasser ses pattes une par une pour obtenir pour se déplacer.
Par la façon dont, à l'inverse, le comportement devrait tous être public. Toute méthode qui semble comme il devrait être privé est en fait un unextracted méthode d'une autre classe. Extrait de la classe et de la méthode et de regarder votre conception de simplifier devant vos yeux.