Partager via


Modificateurs d'accès (Guide de programmation C#)

Mise à jour : novembre 2007

Tous les types et membres de type ont un niveau d'accessibilité, qui contrôle s'ils peuvent être utilisés à partir d'un autre code dans votre assembly ou d'autres assemblys. Vous devez spécifier l'accessibilité d'un type ou d'un membre lorsque vous le déclarez en utilisant l'un de ces modificateurs d'accès :

  • public
    Tout autre code du même assembly ou d'un autre assembly qui y fait référence peut accéder au type ou au membre.

  • private
    Seul le code de la même classe ou du même struct peut accéder au type ou au membre.

  • protected
    Seul le code de la même classe ou du même struct ou d'une classe dérivée peut accéder au type ou au membre.

  • internal
    Tout code du même assembly, mais pas d'un autre assembly, peut accéder au type ou au membre.

  • protected internal
    Tout code du même assembly ou toute classe dérivée dans un autre assembly peut accéder au type ou au membre.

Les exemples suivants montrent comment spécifier des modificateurs d'accès sur un type ou un membre :

public class Bicycle
{
    public void Pedal() { }
}

Tous les modificateurs d'accès ne peuvent pas être utilisés par tous les types ou membres dans tous les contextes, et dans certains cas l'accessibilité d'un membre de type est contrainte par l'accessibilité de son type conteneur. Les sections suivantes fournissent plus de détails sur l'accessibilité.

Accessibilité aux classes et structures

Les classes et les structures déclarées directement dans un espace de noms (autrement dit, qui ne sont pas imbriquées dans d'autres classes ou structures) peuvent être publiques ou internes. Si aucun modificateur d'accès n'est spécifié, la valeur interne s'applique par défaut. Les classes imbriquées et les structures peuvent également être déclarées privées. Les types imbriqués privés ne sont pas accessibles à partir du type conteneur.

Les classes dérivées ne peuvent pas avoir une accessibilité supérieure à leurs types de base. Cela signifie que vous ne pouvez pas avoir une classe publique B qui provient d'une classe A interne. Si cela était autorisé, cela rendrait A public, parce que tous les membres protégés ou internes de A sont accessibles à partir de la classe dérivée.

Vous pouvez permettre aux autres assemblys spécifiques d'accéder à vos types internes en utilisant InternalsVisibleToAttribute. Pour plus d'informations, consultez Assemblys friend (Guide de programmation C#).

Accessibilité aux membres de classes et de structures

Les membres de classe (y compris les classes imbriquées et structures) peuvent être déclarés avec chacun des cinq types d'accès. Les membres de struct ne peuvent pas être déclarés comme protégés parce que les structs ne prennent pas en charge l'héritage.

L'accessibilité d'un membre ne peut jamais être supérieure à l'accessibilité de son type conteneur. Par exemple, une méthode publique déclarée dans un type interne a l'accessibilité interne uniquement.

Lorsqu'un membre d'une classe ou d'un struct est une propriété, un champ, une méthode, un événement ou un délégué et que ce membre est un type ou a un type comme paramètre ou valeur de retour, l'accessibilité de ce membre ne peut pas être supérieure au type. Par exemple, vous ne pouvez pas avoir une méthode M publique qui retourne une classe C à moins que C soit également public. De même, vous ne pouvez pas avoir une propriété protégée de type A si A est déclaré comme privé.

Les opérateurs définis par l'utilisateur doivent toujours être déclarés publics. Pour plus d'informations, consultez operator (Référence C#).

Les destructeurs ne peuvent pas avoir de modificateurs d'accessibilité.

Pour définir le niveau d'accès d'un membre de classe ou de structure, ajoutez le mot clé approprié à la déclaration du membre. Voici quelques exemples :

// public class:
public class Tricycle
{
    // protected method:
    protected void Pedal() { }

    // private field:
    private int wheels = 3;

    // protected internal property:
    protected internal int Wheels
    {
        get { return wheels; }
    }
}
Remarque :

L'accessibilité protectedinternal signifie protégé OU interne, et non protégé ET interne. En d'autres termes, un membre protectedinternal est accessible à partir de toute classe dans le même assembly, y compris les classes dérivées. Pour limiter l'accessibilité aux seules classes dérivées du même assembly, déclarez la classe elle-même comme interne et déclarez ses membres comme protégés.

Autres types

Les interfaces déclarées directement avec un espace de noms peuvent être déclarées comme publiques ou internes, et comme les classes et structs, les interfaces ont comme valeur par défaut l'accès interne. Les membres d'interface sont toujours publics parce que le but d'une interface est permettre à d'autres types d'accéder à une classe ou un struct. Aucun modificateur d'accès ne peut être appliqué aux membres d'interface.

Les membres d'énumération sont toujours publics, et aucun modificateur d'accès ne peut être appliqué.

Par défaut, les délégués ont un accès interne.

Spécification du langage C#

Pour plus d'informations, consultez les sections suivantes dans Spécifications du langage C#.

  • 3.5 Accès à un membre

  • 10.3.5 Modificateurs d'accès

Voir aussi

Concepts

Guide de programmation C#

Référence

Classes et structs (Guide de programmation C#)

Interfaces (Guide de programmation C#)

private (Référence C#)

public (Référence C#)

internal (Référence C#)

protected (Référence C#)

class (Référence C#)

struct (Référence C#)

interface (Référence C#)