propriété: méthode privée ou privée get/set?
Si je veux mettre ma propriété dans une Classe privée, il devrait donc être possible d'utiliser et de définir cette propriété dans cette classe, quelle est la meilleure façon de faire? Cette
public string Name { private get; private set }
ou
private string Name { get; set }
hmmm et il y a aussi
private string Name { private get; private set }
- Voulez-vous définissez la propriété privée de la variable de classe?
- Je pense que oui... pas sûr que je l'obtenir ce que vous voulez ^^
- j'ai ajouté ma réponse. Un coup d'oeil.
- S'il vous plaît essayer de compiler en premier. La question de savoir lequel est le "mieux" suivra après la question de savoir qui l'on est "compileable" en premier lieu.
- Tous les exemples manquer un point-virgule
;
après laset
. Mais même avec cela, seule la seconde est d'ordre juridique (voir ma réponse).
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé de compiler vos exemples? Seulement le moyen on va traduire.
Si vous souhaitez spécifier extra niveau d'accessibilité mot-clé, vous ne pouvez le faire sur l'un des accesseurs (getter/setter), et que le niveau de l'accesseur doit être plus restrictif que l'accessibilité de l'ensemble de la propriété.
Vous pouvez voir ici les règles: La Restriction De L'Accesseur De L'Accessibilité
Il est intéressant de noter qu'à l'origine, C# ne serait pas vous permettent de définir différents accès sur un getter ou un setter, de sorte que les seuls choix possibles étaient:
(Pour cette question, vous ne pouviez pas automatique propriétés et a toujours eu à écrire, et à partir d'une sauvegarde de domaine vous-même, mais nous allons ignorer que juste parce que nous allons avoir moins d'exemples de cette façon).
Il est souvent utile de disposer de différents accès pour les deux, le plus souvent un sens plus restrictif de poseur de getter, et donc les goûts de
a été introduit.
Maintenant, par extension, de tout cela, il semblerait assez logique pour permettre:
Cependant, ce sont ces deux exprimant?
La deuxième n'est pas trop mauvais, c'est juste inutilement répétitif. Pourtant si, il est tout à fait probable que certaines des pensées confuses qui nous a mis là (le plus probable incomplète refactoring). Le bon code est autant l'expression de ce que vous faites, la fabrication d'un ordinateur de faire quelque chose (si quelque chose, plus donc), il vaut mieux l'avoir exprimer clairement.
Donc, si vous vous retrouvez avec les goûts de
{ private get; private set; }
alors il serait probablement intéressant de regarder de nouveau et de penser à ce que vous voulez dire ici. Hourra pour qu'il soit une erreur du compilateur.Th premier cas, c'est encore pire. Il dit: "cette propriété est publique, sauf pour le setter qui est privé, et de la lecture qui est privé". Ce n'est pas une exception, "c'est cette chose, à l'exception de tous les temps" n'est pas un véritable expression de quelque chose. Doublement vive le compilateur de ne pas nous laisser faire.
protected internal string Name { get; set; }
protected internal
n'était pas en C#1.0 et est venu plus tard, mais une rapide recherche semble indiquer qu'il était toujours là.internal
est maintenant accidentellementprivate
.C'est ce que je pense que vous êtes désireux de le faire.
Il est inutile de tenter de faire obtenir le privé lorsque la propriété est publique à moins que vous ne voulez que votre classe à voir. Dans cette situation, vous devez utiliser:
Mise à jour: en deuxième lecture, vous voulez certainement le deuxième exemple.
La meilleure façon dépend de ce que vous voulez:
public string Name { private get; private set }
La propriété estpublic
mais noone pouvez lire ou écrit, à l'exception de la classe elle-même. C'est complètement inutile, donc, d'utiliser justeprivate string Name { get; set }
.En général, si vous affichez la propriété comme un couple de méthodes (qui est effectivement)
La raison d'avoir la possibilité de demander les identifiants à une propriété
get/set
devient évident, je l'espère.private void set_Name(string value) { }
.public string Name { private get; private set; }
ne compile pasCannot specify accessibility modifiers for both accessors of the property or indexer 'Program.Name'
Si vous voulez vraiment ce que vous demandez, alors vous n'avez pas besoin d'une propriété, vous devez utiliser un
private
champ.Pour un membre privé, vous n'avez pas besoin de définir des accesseurs.
Faites simplement ceci:
Il semble que vous voulez
cela vous permettrait d'accéder à
private string Name
.