Le langage C# comme bien d’autres langages orienté objet possède ce que l’on appel des modificateurs d’accès (access modifiers) pour contrôler la visibilité de ses classes, structs, méthodes, attributs, propriétés. On applique ces modificateurs lors de la déclaration des éléments précités en les précédant.
ex: public class MaClass  { … }

(faire schémas)

Du plus restrictif au plus permissif vous avez les modificateurs suivants:

  1. Private: appliqué par défaut (implicitement), est le plus restrictif des modificateurs, car il restreint l’accès aux autres membres de la même class. Aucun membre d’une autre classe (que ca soit une classe dérivée, une classe du même namespace) ne peut accéder à ses membres.
  2. Protected: restreint à la classe et ses dérivées.
  3. Internal: restreint à toutes les classes du même Namespace.
  4. Public: opposé à Private, « ouvre l’accès » de la classe, même une classe d’un Namespace différent peut y accéder si le Namespace y est référencé.
Sealed: est un modificateur (mais pas un modificateur d’accès) et permets de limiter la dérivation de la classe, mais n’a aucun impace sur la visibilité.

un excellent article sur le sujet

les tableaux détaillés du MSND sur les niveaux d’accès