Les niveaux d'accessibilité
Vue d'ensemble
Dans sa version la plus récente au moment où j'écris ce livre (septembre 2026), le langage C# propose sept niveaux d'accessibilité :
publicprivateprotectedinternalprotected internalprivate protectedfile
Les niveaux d'accessibilité déterminent les parties du code depuis lesquelles une classe ou un membre peut être utilisé. Lorsqu’aucun niveau d'accessibilité n’est spécifié, celui-ci dépend de l’élément déclaré et de son emplacement. Une classe de premier niveau est internal par défaut, tandis qu’une classe imbriquée ou un membre de classe est private par défaut.
Bien que les exemples et les tableaux de cet article portent principalement sur les classes, les niveaux d'accessibilité s’appliquent aussi aux interfaces, aux structs et aux records. Les membres d’une interface obéissent également à une règle particulière : ils sont public par défaut lorsqu’aucun niveau d'accessibilité n’est précisé.
Les niveaux d'accessibilité applicables aux classes
Ces niveaux d'accessibilité s’appliquent aux classes de premier niveau, autrement dit aux classes qui ne sont pas déclarées à l’intérieur d’une autre classe :
| Niveau d'accessibilité | Signification |
|---|---|
public |
Classe utilisable depuis tout code pouvant référencer l’assembly dans lequel elle est déclarée |
internal |
Classe utilisable uniquement depuis le même assembly |
file |
Classe utilisable uniquement depuis le fichier dans lequel elle est déclarée |
Ces niveaux d'accessibilité s’appliquent aux classes imbriquées, c’est-à-dire aux classes déclarées à l’intérieur d’une autre classe :
| Niveau d'accessibilité | Signification |
|---|---|
public |
Classe utilisable depuis tout code ayant accès à la classe qui la contient |
private |
Classe utilisable uniquement dans la classe qui la contient |
protected |
Classe utilisable dans la classe qui la contient et dans les classes qui en dérivent |
internal |
Classe utilisable depuis le même assembly |
protected internal |
Classe utilisable depuis le même assembly ou depuis une classe dérivée de la classe qui la contient, y compris dans un autre assembly |
private protected |
Classe utilisable dans la classe qui la contient et dans les classes qui en dérivent au sein du même assembly |
L’accessibilité effective d’une classe imbriquée dépend également de celle de la classe qui la contient. Ainsi, une classe imbriquée public déclarée dans une classe internal ne peut pas être utilisée depuis un autre assembly.
Les niveaux d'accessibilité applicables aux membres des classes
Ces niveaux d'accessibilité s’appliquent aux membres des classes :
| Niveau d'accessibilité | Signification |
|---|---|
public |
Membre utilisable depuis tout code ayant accès à la classe qui le déclare |
private |
Membre utilisable uniquement dans la classe qui le déclare |
protected |
Membre utilisable dans la classe qui le déclare et dans les classes qui en dérivent |
internal |
Membre utilisable depuis le même assembly |
protected internal |
Membre utilisable depuis le même assembly ou depuis une classe dérivée de la classe qui le déclare, y compris dans un autre assembly |
private protected |
Membre utilisable dans la classe qui le déclare et dans les classes qui en dérivent au sein du même assembly |