Quelques raccourcis :
Avec C#, comme avec plupart des langages OO, il est possible d'apposer des qualifications d'accès sur des classes, des méthodes, des interfaces, etc.
Ce qui suit détaille sommairement le sens des six qualifications d'accès possibles avec C#. Trois sont typiques de l'ensembles des langages OO, soit private, protected et public, alors que les trois autres sont un peu plus « exotiques » et sont plus spécifiquement rattachées au modèle de ce langage (entre autres pour pallier, parfois de manière un peu boiteuse, l'absence de la qualification friend).
La qualification private signifie accessible à la classe et à ses instances, mais pas aux autres classes (même pas à ses classes dérivées).
Il devrait s'agir de votre choix de prédilection, puisque c'est le choix qui entraîne le plus faible couplage. En effet, puisque la classe seule voit ce qui est privé, alors ce qui est privé peut être modifié sans conséquences apparentes pour le code client.
Cette qualification est implicite pour les membres d'instance et les membre de classe d'une classe.
La qualification protected signifie accessible à la classe et à ses instances, à ses classes dérivées, mais pas aux autres classes.
Ceci semble préférable à public, mais souvenez-vous de cet adage : « une classe, c'est une Rock Star, ça ne connaît pas ses enfants ». Puisqu'il est en général facile de dériver d'une classe avec une classe de notre cru (du moins quand la classe de base nous est accessible), protected est souvent aussi fragile que public.
La qualification public signifie accessible à tous.
C'est une relation à fort couplage : puisque ce qui est public est accessible à tous, cela signifie que tout changement est susceptible d'affecter le code ailleurs, et de briser du code existant. Pour cette raison, un bon adage est « private si possible, public seulement si nécessaire » (et protected dans certains cas plutôt nichés).
Ce que .NET nomme un « assemblage » est une unité de code compilée (typiquement, une exécutable ou une .dll).
La qualification internal signifie accessible accessible aux autres types du même assemblage.
Cette qualification est implicite pour les types d'un espace nommé.
La qualification protected internal signifie accessible à la classe elle-même, aux enfants et aux autres membres de l’assemblage.
La qualification private protected signifie accessible à la classe elle-même, et aux enfants déclarés dans le même assemblage.
Quelques liens pour enrichir le propos.