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.