Partager via


private protected (Référence C#)

La combinaison de private protected mots clés est un modificateur d’accès aux membres. Les types qui dérivent de la classe et sont déclarés dans l’assembly conteneur peuvent accéder à un membre protégé privé. Pour obtenir une comparaison des private protected autres modificateurs d’accès, consultez Niveaux d’accessibilité.

La documentation de référence du langage C# décrit la version la plus récente du langage C#. Il contient également la documentation initiale des fonctionnalités dans les préversions publiques pour la prochaine version du langage.

La documentation identifie toute fonctionnalité introduite en premier dans les trois dernières versions de la langue ou dans les préversions publiques actuelles.

Conseil / Astuce

Pour savoir quand une fonctionnalité a été introduite en C#, consultez l’article sur l’historique des versions du langage C#.

Les types dérivés peuvent accéder à un membre protégé privé d’une classe de base dans son assembly contenant uniquement si le type statique de la variable est le type de classe dérivé. Par exemple, considérez le segment de code suivant :

// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
    private protected int myValue = 0;
}

public class DerivedClass1 : BaseClass
{
    void Access()
    {
        var baseObject = new BaseClass();

        // Error CS1540, because myValue can only be accessed by
        // classes derived from BaseClass.
        // baseObject.myValue = 5;

        // OK, accessed through the current derived class instance
        myValue = 5;
    }
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass2 : BaseClass
{
    void Access()
    {
        // Error CS0122, because myValue can only be
        // accessed by types in Assembly1
        // myValue = 10;
    }
}

Cet exemple contient deux fichiers, Assembly1.cs et Assembly2.cs. Le premier fichier contient une classe de base publique, BaseClasset un type dérivé de celui-ci. DerivedClass1 BaseClass possède un membre protégé privé, myValue, qui DerivedClass1 peut accéder en tant que membre hérité dans le même assembly.

Dans le deuxième fichier, une tentative d’accès myValue en tant que membre DerivedClass2 hérité produit une erreur, car private protected les membres sont uniquement accessibles par les types dérivés dans le même assembly. Cette restriction est la différence clé par rapport protected à (qui autorise l’accès à partir de classes dérivées dans n’importe quel assembly) et protected internal (qui autorise l’accès à partir de n’importe quelle classe au sein du même assembly ou des classes dérivées dans n’importe quel assembly).

Si Assembly1.cs contient un InternalsVisibleToAttribute nom, Assembly2la classe DerivedClass2 dérivée a accès aux private protected membres déclarés dans BaseClass. InternalsVisibleTo rend les membres de private protected visibles par les classes dérivées dans d’autres assemblys.

Comparaison avec d’autres modificateurs d’accès protégés

Le tableau suivant résume les principales différences entre les trois modificateurs d’accès protégés :

Modificateur d'accès Même Assembly, classe dérivée Classe non dérivée, même assembly Assemblage différent, classe dérivée
protected ✔️ ✔️
protected internal ✔️ ✔️ ✔️
private protected ✔️
  • Utilisez protected quand vous souhaitez que les classes dérivées dans n’importe quel assembly accèdent au membre.
  • Utilisez protected internal quand vous souhaitez l’accès le plus permissif (n’importe quelle classe dans le même assembly ou les classes dérivées n’importe où).
  • Utilisez private protected quand vous souhaitez l’accès protégé le plus restrictif (uniquement les classes dérivées dans le même assembly).

Vous ne pouvez pas déclarer private protected de membres de struct, car les structs ne peuvent pas être hérité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.

Voir aussi