private protected (Référence C#)

La combinaison de mots clés private protected est un modificateur d’accès de membre. Un membre protégé privé est accessible par les types dérivés de la classe conteneur, mais seulement au sein de son assembly conteneur. Pour obtenir une comparaison de private protected et des autres modificateurs d’accès, consultez Niveaux d’accessibilité.

Notes

Le modificateur d’accès private protected est valide dans C# 7.2 et ultérieur.

Exemple

Un membre protégé privé d’une classe de base est accessible à partir des types dérivés de son assembly conteneur seulement si le type statique de la variable est le type de la classe dérivée. Prenons l’exemple de l’extrait de code suivant :

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, BaseClass, et un type qui en est dérivé, DerivedClass1. BaseClass possède un membre protégé privé, myValue, auquel DerivedClass1 tente d’accéder de deux manières. La première tentative d’accès à myValue via une instance de BaseClass génère une erreur. Cependant, la tentative de l’utiliser comme un membre hérité dans DerivedClass1 réussit.

Dans le deuxième fichier, une tentative d’accès à myValue en tant que membre hérité de DerivedClass2 génère une erreur, car il est accessible seulement par des types dérivés dans Assembly1.

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

Les membres de struct ne peuvent pas être private protected, car le struct ne peut pas être hérité.

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