Pour autant que je sache, private
est la valeur par défaut partout en C # (ce qui signifie que si je ne le fais pas écrire public
, protected
, internal
, etc. , il 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 C # par défaut) savent que c'est privé? Ou y a-t-il une différence pour le compilateur?
De plus, est - il un cas où l' écriture « privée » (seul) va changer l'accessibilité du membre?
c#
private
specifications
access-modifiers
auto-generate
Camilo Martin
la source
la source
internal
par défaut.Réponses:
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 appartenant à différents types ont des accessibilités par défaut différentes (telles que public pour les membres d'interface). Pour plus de détails, consultez Niveaux d'accessibilité sur MSDN.
Aussi,
Spécifier cela explicitement aide à indiquer votre intention de rendre le type privé, très explicitement. 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.
la source
private
.get
etset
par défaut à l'accessibilité de la propriété ellePas 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 estprivate
.Cela le rend explicite, ce qui est bon pour deux raisons:
Quant à votre dernière partie:
Oui, pour rendre la moitié d'une propriété plus restrictive que l'autre:
J'avais l' habitude d'utiliser des valeurs par défaut partout où je pouvais, mais j'ai été convaincu (en partie par Eric Lippert) qu'indiquer clairement que vous y avez pensé et que vous avez décidé de rendre quelque chose de privé est une bonne idée.
Personnellement, j'aurais aimé qu'il y ait un moyen de le faire pour les déclarations de type scellées / non scellées - peut-être même pas par défaut. Je soupçonne que de nombreux développeurs (moi y compris si je ne fais pas attention) laissent les classes non scellées simplement parce que c'est moins d'effort que de les sceller.
la source
final
un exemple plus typique.private
ajoute un encombrement visuel. À ceux qui insistent sur le fait que cela rend les choses explicites, je demanderais: faites-vous cela avec les mathématiques aussi? Par exemple:Trouvez-vous cela peu clair sans parenthèses redondantes
b / c
?La règle en C # est très simple: par défaut, tout est aussi proche de privé que possible. Donc, si vous avez besoin que quelque chose soit plus visible que la valeur par défaut, ajoutez un modificateur. Sinon, n'ajoutez pas de mots clés inutiles à votre code.
la source
Friend
pour les membres, par exemple. C # fait sa visibilité par défaut de la bonne manière: les choses sont définies sur la moins visibilité possible à moins qu'elles ne soient modifiées. D'après ce que je suis en mesure de trouver, il semble que la même chose est vraie pour C ++ (sauf structs). (Cela ne semble pas être vrai pour F #.)var
, car cela réduit l'encombrement visuel, et pourtant tant de personnes sont en faveur de la saisie inutileprivate
.Déclarer explicitement privé , signifie que vous savez qu'il est privé. Je ne pense pas que oui, 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 « Je pense qu'il est », « Je suis sûr qu'il est », etc. Il 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 un code qui n'a pas été explicitement déclaré privé , je supposerais probablement qu'il est 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.
la source
Lisibilité - Tout le monde ne sait peut-être pas que le comportement par défaut est privé.
Intention - Donne une indication claire que vous avez spécifiquement déclaré la propriété privée (pour une raison quelconque).
la source
La lisibilité, la démonstration d'intention sont deux bonnes raisons auxquelles je peux penser.
la source
Une bonne raison de spécifier explicitement la visibilité est que vous n'ayez pas à penser à la valeur par défaut du contexte dans lequel vous vous trouvez.
Une autre bonne raison est que FxCop vous dit de le faire.
la source
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 tous les langages dans lesquels je programme.
la source
private
" est un détail obscur ... Mais je comprends le point. L'autre jour, j'ai eu du mal à me souvenir du fonctionnement du framework que j'ai utilisé la semaine dernière ( MEF ).Je dirais pour la cohérence avec la lisibilité de la portée du reste de la classe.
la source