105 votes

Aucune raison d'écrire le "privé" clé en C#?

Autant que je sache, private est la valeur par défaut partout en C# (ce qui signifie que si je n'écris pas public, protected, internal, etc. il sera private par défaut). (Corrigez-moi si je me trompe.)

Alors, quelle est la raison d'écrire ce mot clé, ou pourquoi il existe même pour les membres?

Par exemple, lorsqu'un gestionnaire d'événement est généré automatiquement, il ressemble à ceci:

private void RatTrap_MouseEnter(object sender, CheeseEventArgs e)
{

}

Mais pourquoi est-il écrit même si c'est implicite et par défaut? Juste pour que les développeurs novices (qui ne connaissent pas c'est le C# par défaut) à savoir que c'est le privé? Ou est-il une différence pour le compilateur?

En outre, il est un cas où l'écriture "privé" (seul) va modifier l'accessibilité des états?

166voto

Reed Copsey Points 315315

Autant que je sache, le privé est la valeur par défaut partout en C# (ce qui signifie que si je n'écris pas de public, protégé, interne, etc. il sera privé par défaut). (merci de me corriger si mal).

Ce n'est pas vrai. Types définis dans un espace de noms (classes, structures, interfaces, etc) seront interne par défaut. Aussi, les membres au sein des différents types de différentes défaut d'accessibilité (publics, par exemple pour les membres d'interface). Pour plus de détails, consultez les Niveaux d'Accessibilité sur le site MSDN.

Aussi,

Alors, quelle est la raison d'écrire ce mot clé, ou pourquoi est-il encore exister?

En spécifiant explicitement permet de désigner votre intention de faire le type privé, de manière très explicite. Cette aide à la maintenance de votre code au fil du temps. Ce qui peut aider avec d'autres développeurs (ou vous-même) de savoir si un membre est privé par défaut ou sur le but, etc.

117voto

Jon Skeet Points 692016

Autant que je sache, le privé est la valeur par défaut partout en C#

Pas tout à fait - la valeur par défaut est "le plus accès restreint disposition de la présente déclaration". Ainsi, par exemple, avec un haut niveau de type de la valeur par défaut est internal; imbriquée type de la valeur par défaut est private.

Alors, quelle est la raison d'écrire ce mot clé, ou pourquoi est-il encore exister?

Il rend explicite, ce qui est bon et ce pour deux raisons:

  • Cela le rend plus clair pour ceux qui ne connaissent pas les valeurs par défaut, comme par votre question (je n'ai jamais aimé cet argument, personnellement, mais j'ai pensé qu'il vaut la peine de mentionner)
  • Il donne une impression que vous avez délibérément décidé de le rendre privé, plutôt que de simplement disparu avec les valeurs par défaut.

Quant à votre dernière partie:

De plus, est-il un cas où l'écriture "privé" (seul) va changer l'accessibilité du membre?

Oui, pour faire la moitié d'une propriété plus restrictives que les autres:

// Public getter, public setter
public int Foo { get; set; }

// Public getter, private setter
public int Bar { get; private set; }

Je l'ai utilisé pour aller avec les valeurs par défaut partout où je pouvais, mais j'ai été convaincu (en partie par Eric Lippert) qui fait clairement savoir que vous avez pensé à ce sujet et a décidé de faire quelque chose de privé, est une bonne idée.

Personnellement, je souhaite qu'il y avait un moyen de le faire que pour les scellés scellés, aussi, pour les déclarations de type - peut-être même pas avoir un défaut. Je soupçonne que beaucoup de développeurs (dont moi-même si je ne suis pas attentif) congé de classes descellés juste parce que c'est moins l'effort de les faire scellé.

6voto

JD Isaacks Points 14540

Autant que je sache, le privé est la valeur par défaut partout en C#

Déclarer explicitement privé, signifie que vous savez qu'il est privé. Non seulement pense que c'est parce que comme vous le savez, c'est la valeur par défaut. Cela signifie aussi que quelqu'un d'autre qui regarde le code sait ce que c'est.

Il n'y a pas de "je pense que c'est", "je suis sûr que c'est", etc. C'est juste. Et tout le monde est sur la même page.

Je ne suis pas un C# développeur. Si je devais travailler avec un code qui n'est pas explicitement déclaré en privé, je serais probablement supposer qu'il a été interne.

Je n'aime pas quand les choses sont implicitement défini. Il n'est jamais aussi claire que lorsqu'ils sont explicitement définis.

6voto

James Points 40024

Lisibilité - tout le monde Ne peut savoir qui est le comportement par défaut.

Intention - Donne une indication claire que vous avez déclaré expressément la propriété privée (pour quelque raison que ce soit).

5voto

Maess Points 2342

La lisibilité, la démonstration de l'intention sont deux bonnes raisons je pense.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: