8. Modificateurs d'accès
Pour favoriser l'encapsulation, un type ou un type membre peut se cacher lui-même des autres types ou des autres assemblées en ajoutant l'un des 5 modificateurs suivants à sa déclaration :
- public : Le type ou le type membre est pleinement accessible. C'est le modificateur implicite pour les types enums et les membres d'interfaces,
- internal : Le type ou le type membre dans une assemblée A n'est accessible que depuis A. C'est l'accessibilité par défaut pour les types non-imbriqués et il peut donc être omis,
- private : Le type membre dans le type T n'est accessible que dpuis T. C'est l'accessibilité par défaut pour les classes et les membres de structures; ainsi il peut être omis,
- protected : Le type membre dans la classe C est accessible depuis C ou depuis une classe dérivée de C ou
- protected internal : Le type membre dans la classe C et l'assemblée A est accessible depuis C, depuis une classe dérivée de C, ou depuis A.
Notez qu'un type membre peut être un type imbriqué.
8.1. Restrictions sur les modificateurs d'accès
Un type ou un type membre ne peut pas être déclaré pour être plus accessible que les types qu'il utilise dans la déclaration. Par exemple, une classe ne peut pas être déclarée public si elle dérive d'une classe internal, ou une méthode ne peut pas être protected si le type de l'un de ses paramètres est interne à l'assemblée.
De plus, les modificateurs d'accès ne peuvent pas être utilisés lorsqu'ils entrent en conflit avec la finalité des modificateurs hérités. Par exemple, un membre virtuel (virtual) ou abstrait (abstract) ne peut pas être déclaré private, puisqu'il serait impossible de le surcharger. De même, une classe scellée (sealed) ne peut pas définir de nouveaux membres protected, du fait qu'il n'y a pas de classe qui pourrait profiter de cette accessiblité.
Finalement, pour préserver le contrat d'une classe de base, une fonction membre avec le modificateur override doit avoir la même accessibilité que le membre virtuel qu'elle surcharge.