private protected (informazioni di riferimento su C#)
La combinazione delle parole chiave private protected
è un modificatore di accesso ai membri. Un membro protetto privato è accessibile per i tipi derivati dalla classe che lo contiene, ma solo all'interno dell'assembly che lo contiene. Per un confronto di private protected
con altri modificatori di accesso, vedere Livelli di accessibilità.
Nota
Il modificatore di accesso private protected
è valido in C# versione 7.2 e versioni successive.
Esempio
Un membro protetto privato di una classe base è accessibile dai tipi derivati nell'assembly che lo contiene solo se il tipo statico della variabile è il tipo della classe derivata. Si consideri il segmento di codice di esempio seguente:
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;
}
}
Questo esempio contiene due file, Assembly1.cs
e Assembly2.cs
.
Il primo file contiene una classe base pubblica, BaseClass
, e un tipo derivato, DerivedClass1
. BaseClass
è proprietaria di un membro protetto privato, myValue
, a cui DerivedClass1
prova ad accedere in due modi. Il primo tentativo di accedere a myValue
tramite un'istanza di BaseClass
genererà un errore. Il tentativo di usarlo come membro ereditato in DerivedClass1
avrà, tuttavia, esito positivo.
Nel secondo file un tentativo di accedere a myValue
come membro ereditato di DerivedClass2
genererà un errore, perché è accessibile solo per i tipi derivati in Assembly1.
Se Assembly1.cs
contiene un oggetto InternalsVisibleToAttribute che denomina Assembly2
, la classe derivata DerivedClass2
avrà accesso ai private protected
membri dichiarati in BaseClass
. InternalsVisibleTo
rende private protected
membri visibili alle classi derivate in altri assembly.
I membri struct non possono essere private protected
perché struct non può essere ereditato.
Specifiche del linguaggio C#
Per altre informazioni, vedere la specifica del linguaggio C#. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.