Fouillez-vous un peu dans Reflector et vous verrez que le BCL lui-même est extrêmement incohérent. Vous verrez beaucoup de classes internes avec des membres public
et beaucoup d'autres avec internal
membres. Plusieurs classes même mélanger et assortir les deux sans aucune rime ou raison particulière que je suis capable de discerner.
Il n'y a pas de « bonne » réponse, mais il y a quelques choses que vous devriez considérer chaque fois que vous devez prendre une décision à ce sujet:
membres internal
ne peuvent pas mettre en œuvre implicitement une interface et des implémentations explicites sont toujours privés. Donc, si vous voulez que les membres de l'interface soient accessibles via l'instance class (la méthode Dispose
de IDisposable
est une instance courante), ils doivent être publics.
Les visibilités de type peuvent changer. Vous pourriez décider que la classe internal
possède des fonctionnalités utiles que vous voulez mettre à la disposition de l'extérieur. Mais si vous faites, alors tous les membres publics deviennent accessibles par tout le monde. Vous devriez décider à l'avance si c'est ce que vous voulez. D'autre part, une autre raison pour laquelle vous pouvez créer une classe internal
public
est si vous décidez que vous avez besoin de la sous-classer et que les classes dérivées doivent être dans un assembly différent. Dans ce cas, certains de vos membres internal
devraient probablement être protected internal
à la place, sinon les classes dérivées n'auront pas accès aux membres dont ils pourraient avoir besoin.
En fin de compte, ce que tout se résume à est le code d'écriture pour être lu et maintenu par d'autres personnes. Le modificateur internal
peut signifier deux choses très différentes à un programmeur de maintenance:
Qu'il ne semble pas utile au monde extérieur, mais ne serait pas réellement être nuisibles soit. Un exemple typique serait une classe d'utilité qui a été fouettée en 5 minutes et ne fait pas beaucoup de validation ou de vérification d'erreurs. Dans ce cas, c'est OK pour quelqu'un de le faire public
tant qu'ils resserrent un peu le code et/ou documentent comment l'utiliser correctement. Rendre cette hypothèse explicite en faisant les membres public
.
Il s'agit en fait de non sûr pour consommation extérieure; Dans ce cas, vous voulez vraiment faire les méthodes individuelles internal
pour qu'il soit absolument clair que personne d'autre ne devrait utiliser cette classe, jamais.
Choisissez l'option appropriée pour votre scénario.