web-dev-qa-db-fra.com

Une raison d'écrire le mot-clé "privé" en C #?

Pour 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. ce sera private par défaut). (S'il vous plait corrigez moi si je me trompe.)

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

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

private void RatTrap_MouseEnter(object sender, CheeseEventArgs e)
{

}

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

De plus, y a-t-il un cas où écrire "privé" (seul) va changer l'accessibilité du membre?

105
Camilo Martin

AFAIK, 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 privé par défaut). (veuillez me corriger en cas d'erreur).

Ce n'est pas vrai. Les types définis dans un espace de noms (classes, structures, interfaces, etc.) seront internes par défaut. En outre, les membres de différents types ont différentes accessibilités par défaut (telles que public pour les membres de l'interface). Pour plus de détails, voir Niveaux d'accessibilité sur MSDN.

Aussi,

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

La spécification explicite permet d'indiquer votre intention de rendre le type privé, de manière très explicite. Cela contribue à la maintenabilité de votre code au fil du temps. Cela peut aider d'autres développeurs (ou vous-même) à savoir si un membre est privé par défaut ou exprès, etc.

166
Reed Copsey

AFAIK, privé est la valeur par défaut partout en C #

Pas tout à fait - la valeur par défaut est "l'accès le plus restreint disponible pour cette déclaration". Ainsi, par exemple, avec un type de niveau supérieur, la valeur par défaut est internal; pour un type imbriqué, la valeur par défaut est private.

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

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

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

Quant à votre dernière partie:

De plus, y a-t-il un cas où l'écriture "privée" (seule) changera l'accessibilité du membre?

Oui, pour rendre la moitié d'une propriété plus restrictive que l'autre:

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

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

I tilisé pour aller avec les valeurs par défaut partout où je le pouvais, mais j'ai été convaincu (en partie par Eric Lippert) qu'il était clair que vous y aviez pensé et décidé à faire quelque chose de privé est une bonne idée.

Personnellement, j'aimerais qu'il y ait un moyen de le faire pour les déclarations scellées/non scellées, également, pour les déclarations de type - peut-être même pas avoir une valeur par défaut. Je soupçonne que de nombreux développeurs (y compris moi-même si je ne fais pas attention) laissent des classes non scellées simplement parce que c'est moins d'effort que de les rendre scellées.

117
Jon Skeet

private ajoute un encombrement visuel. À ceux qui insistent sur le fait que cela rend les choses explicites, je demanderais: faites-vous cela aussi avec les mathématiques? Par exemple:

var answer = a + b / c;

Trouvez-vous cela peu clair sans parenthèses redondantes autour de b / c?

La règle en C # est très simple: Par défaut, tout est aussi proche du privé que possible. Donc, si vous avez besoin que quelque chose soit plus visible que par défaut, ajoutez un modificateur. Sinon, n'ajoutez pas de mots clés inutiles à votre code.

11
Ryan Lundy

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

Déclarer explicitement privé signifie que vous savez c'est privé. Pas seulement le penser, car pour autant que vous le sachiez, c'est la valeur par défaut. Cela signifie également que quelqu'un d'autre qui regarde le code sait de quoi il s'agit.

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

Je ne suis pas un développeur C #. Si je devais travailler avec du code qui n'était pas explicitement déclaré privé , je supposerais probablement qu'il était interne .

Je n'aime pas quand les choses sont implicitement définies. Ce n'est jamais aussi clair que lorsqu'ils sont définis explicitement.

7
JD Isaacks

Lisibilité - Tout le monde ne sait pas que privé est le comportement par défaut.

Intention - Donne une indication claire que vous avez spécifiquement déclaré la propriété privée (pour une raison quelconque).

6
James

La lisibilité, la démonstration de l'intention sont deux grandes raisons auxquelles je peux penser.

5
Maess

Une bonne raison de spécifier explicitement la visibilité est de ne pas avoir à réfléchir à la valeur par défaut du contexte dans lequel vous vous trouvez.

Une autre bonne raison est que FxCop vous dit de le faire.

3
Patrick McDonald

Beaucoup de gens (des gens comme moi!) Programment régulièrement dans une poignée de langues différentes. Être explicite avec des choses comme celles-ci m'empêche d'avoir à me souvenir de tous les détails obscurs de toutes les langues dans lesquelles je programme.

2
davidtbernal

Je dirais par souci de cohérence avec la lisibilité de la portée du reste de la classe.

0
MGZero