Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Tous les types et les membres de type ont un niveau d’accessibilité. Le niveau d’accessibilité contrôle si d’autres codes de votre assembly ou d’autres assemblys peuvent les utiliser. 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.
Utilisez le modificateur de fichier pour les types de niveau supérieur (non imbriqué). Le file modificateur limite l’accès au code dans le même fichier source. Vous ne pouvez pas combiner le file modificateur avec n’importe quel modificateur d’accès.
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 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 structs déclarés directement dans un espace de noms (ne sont pas imbriqués dans d'autres classes ou structs) peuvent avoir public ou internal accès. Si vous ne spécifiez pas de modificateur d’accès, la valeur par défaut est internal. Vous pouvez également utiliser le modificateur pour restreindre l’accès file au fichier source actuel.
Vous pouvez déclarer des membres de struct, y compris des classes et des structs imbriqués, en tant que public, internalou private. Vous pouvez déclarer des membres de classe, y compris des classes et des structs imbriqués, comme public, , protected internal, protected, internal, private protected, ou private. Par défaut, les membres des classes et des structs, y compris les classes et structs imbriqués, ont un accès private.
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
Vous pouvez déclarer des interfaces directement dans un espace de noms en tant que public ou internal. Tout comme les classes et les structs, les interfaces sont accessibles par défaut internal. 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. Utilisez des modificateurs d’accès sur interface les membres afin de fournir une implémentation commune nécessaire à tous les implémenteurs d'une même 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 des membres d’un class ou struct (y compris des classes et des structs imbriqués) avec l’un des six types d’accès. Vous ne pouvez pas déclarer de membres de struct en tant que 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, vous pouvez accéder à un public membre d’une internal classe en dehors de l’assembly si le membre implémente des méthodes d’interface ou remplace les méthodes virtuelles définies dans une classe de base publique.
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.
Vous devez toujours déclarer des opérateurs définis par l’utilisateur 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 enum type sont toujours public, et vous ne pouvez pas appliquer de modificateurs d’accès.
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.