Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Tous les types et les membres de type ont un niveau d’accessibilité. Le niveau d’accessibilité contrôle s’il peut être utilisé à partir d’un autre code dans votre assembly ou d’autres assemblies. Un assembly est un fichier .dll ou .exe créé en compilant un ou plusieurs fichiers .cs dans une seule compilation. Utilisez les modificateurs d’accès suivants pour spécifier l’accessibilité d’un type ou d’un membre lorsque vous le déclarez :
- publique : le code dans n’importe quel assembly peut accéder à ce type ou à ce membre. Le niveau d’accessibilité du type conteneur contrôle le niveau d’accessibilité des membres publics du type.
-
privé : seul le code déclaré dans le même
classoustructpeut accéder à ce membre. -
protégé : seul le code du même
classou dans unclassdérivé peut accéder à ce type ou à ce membre. - interne : seul le code du même assembly peut accéder à ce type ou à ce membre.
- interne protégé : seul le code du même assembly ou dans une classe dérivée d’un autre assembly peut accéder à ce type ou à ce membre.
- protégé privé : seul le code du même assembly et dans la même classe ou une classe dérivée peut accéder au type ou au membre.
- Fichier : seul le code du même fichier peut accéder au type ou au membre.
Le modificateur record sur un type entraîne la synthèse des membres supplémentaires par le compilateur. Le modificateur record n’affecte pas l’accessibilité par défaut pour un record class ou un record struct.
Tableau récapitulatif
| Emplacement de l’appelant | public |
protected internal |
protected |
internal |
private protected |
private |
|---|---|---|---|---|---|---|
| Dans la classe | ✔️️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Classe dérivée (même assembly) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| Classe non dérivée (même assembly) | ✔️ | ✔️ | ❌ | ✔️ | ❌ | ❌ |
| Classe dérivée (assembly différent) | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ❌ |
| Classe non dérivée (assembly différent) | ✔️ | ❌ | ❌ | ❌ | ❌ | ❌ |
Les exemples suivants montrent comment spécifier des modificateurs d’accès sur un type et un membre :
public class Bicycle
{
public void Pedal() { }
}
Les modificateurs d’accès ne sont pas toujours valides pour tous les types ou membres dans tous les contextes. Dans certains cas, l’accessibilité du type conteneur limite l’accessibilité de ses membres.
Plusieurs déclarations d’une classe partielle ou d’un membre partiel doivent avoir la même accessibilité. Si une déclaration de la classe partielle ou du membre n’inclut pas de modificateur d’accès, les autres déclarations ne peuvent pas déclarer de modificateur d’accès. Le compilateur génère une erreur si plusieurs déclarations pour la classe ou la méthode partielle déclarent des accessibilités différentes.
Accessibilité des classes et des structs
Les classes et les structures déclarées directement dans un espace de noms (c’est-à-dire qui ne sont pas imbriquées dans d'autres classes ou structures) peuvent avoir un accès public, internal ou file.
internal est la valeur par défaut si aucun modificateur d’accès n’est spécifié.
Les membres de struct, y compris les classes et structs imbriqués, peuvent être déclarés public, internal ou private. Les membres de classe, y compris les classes et structs imbriqués, peuvent être public, protected internal, protected, internal, private protected ou private. Les membres de classe et de struct, y compris les classes et les structs imbriqués, ont un accès private par défaut.
Les classes dérivées ne peuvent pas avoir une accessibilité supérieure à celle de leurs types de base. Vous ne pouvez pas déclarer publique une classe B qui dérive d’une classe interne A. Si cela était autorisé, cela aurait pour effet de rendre A public, car tous les membres protected ou internal de A seraient accessibles à partir de la classe dérivée.
Vous pouvez autoriser d’autres assemblies spécifiques à accéder à vos types internes à l’aide d’InternalsVisibleToAttribute. Pour plus d’informations, consultez Assemblys friend.
Autres types
Les interfaces qui sont déclarées directement dans un espace de noms peuvent être public ou internal et, tout comme les classes et les structs, les interfaces ont un niveau d’accès internal par défaut. Les membres d’interface sont déclarés comme public par défaut, car l’objectif d’une interface est de permettre à d’autres types d’accéder à une classe ou à un struct. Les déclarations de membre d’interface peuvent inclure n’importe quel modificateur d’accès. Vous utilisez des modificateurs d’accès sur interface membres pour fournir une implémentation commune nécessaire par tous les implémenteurs d’une interface.
Un type delegate déclaré directement dans un espace de noms dispose de l’accès internal par défaut.
Pour plus d’informations sur les modificateurs d’accès, consultez la page niveaux d’accessibilité.
Accessibilité des membres
Vous pouvez déclarer les membres d’un class ou struct (notamment les classes et structs imbriqués) avec l’un des six types d’accès. Les membres de struct ne peuvent pas être déclarés protected, protected internalou private protected parce que les structs ne prennent pas en charge l’héritage.
Normalement, l’accessibilité d’un membre ne peut être supérieure à l’accessibilité du type qui le contient. Toutefois, un membre public d’une classe internal peut être accessible de l’extérieur de l’assembly si le membre implémente des méthodes d’interface ou substitue des méthodes virtuelles qui sont définies dans une classe de base public.
Le type d’un champ, d’une propriété ou d’un événement de membre doit être au moins aussi accessible que le membre lui-même. De même, le type de retour et les types de paramètre d’une méthode, d’un indexeur ou d’un délégué doivent être au moins aussi accessibles que le membre lui-même. Par exemple, vous ne pouvez pas avoir de méthode publicM qui retourne une classe C à moins que C ne soit également public. Vous ne pouvez pas non plus avoir une propriété protected de type A si A est déclaré private.
Les opérateurs définis par l’utilisateur doivent toujours être déclarés comme public. Pour plus d’informations, consultez Surcharge d’opérateur.
Pour définir le niveau d’accès pour un membre class ou struct, ajoutez le mot clé approprié à la déclaration de membre, comme indiqué dans l’exemple suivant.
// public class:
public class Tricycle
{
// protected method:
protected void Pedal() { }
// private field:
private int _wheels = 3;
// protected internal property:
protected internal int Wheels => _wheels;
}
Les finaliseurs ne peuvent pas avoir de modificateurs d’accessibilité. Les membres d’un type enum sont toujours publicet aucun modificateur d’accès ne peut être appliqué.
Le modificateur d’accès file est autorisé uniquement sur les déclarations de type de niveau supérieur (non imbriquées).
spécification du langage C#
Pour plus d'informations, voir la spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.