Aller au contenu

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é :

  • public
  • private
  • protected
  • internal
  • protected internal
  • private protected
  • file

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