MISE À JOUR: Cette question a fait l'objet de mon blog en septembre 2014 . Merci pour la grande question!
Il y a un débat considérable sur cette question, même au sein de l'équipe de compilation elle-même.
Tout d'abord, il est sage de comprendre les règles. Un membre public d'une classe ou d'une structure est un membre accessible à tout ce qui peut accéder au type conteneur . Ainsi, un membre public d'une classe interne est effectivement interne.
Alors maintenant, étant donné une classe interne, ses membres auxquels vous souhaitez accéder dans l'assembly doivent-ils être marqués comme publics ou internes?
Mon opinion est la suivante: marquer ces membres comme publics.
J'utilise "public" pour signifier "ce membre n'est pas un détail d'implémentation". Un membre protégé est un détail d'implémentation; il y aura quelque chose qui sera nécessaire pour faire fonctionner une classe dérivée. Un membre interne est un détail d'implémentation; quelque chose d'autre interne à cet assembly a besoin du membre pour fonctionner correctement. Un membre public dit que "ce membre représente la fonctionnalité clé et documentée fournie par cet objet".
Fondamentalement, mon attitude est la suivante: supposons que j'ai décidé de faire de cette classe interne une classe publique. Pour ce faire, je veux changer exactement une chose : l'accessibilité de la classe. Si transformer une classe interne en classe publique signifie que je dois également transformer un membre interne en membre public, alors ce membre faisait partie de la surface publique de la classe, et il aurait dû être public en premier lieu.
D'autres personnes sont en désaccord. Il y a un contingent qui dit qu'ils veulent pouvoir regarder la déclaration d'un membre et savoir immédiatement si elle va être appelée uniquement à partir du code interne.
Malheureusement, cela ne fonctionne pas toujours bien; par exemple, une classe interne qui implémente une interface interne doit toujours avoir les membres d'implémentation marqués comme publics, car ils font partie de la surface publique de la classe .