protected (Riferimenti per C#)
La parola chiave protected
è un modificatore di accesso ai membri.
Nota
Questa pagina illustra l'accesso protected
. La parola chiave protected
fa anche parte dei modificatori di accesso protected internal
e private protected
.
Un membro protetto è accessibile all'interno della classe di appartenenza e dalle istanze della classe derivata.
Per un confronto di protected
con altri modificatori di accesso, vedere Livelli di accessibilità.
Esempio 1
Un membro protetto di una classe di base è accessibile in una classe derivata solo se viene eseguito l'accesso tramite il tipo di classe derivata. Si consideri il segmento di codice di esempio seguente:
class A
{
protected int x = 123;
}
class B : A
{
static void Main()
{
var a = new A();
var b = new B();
// Error CS1540, because x can only be accessed by
// classes derived from A.
// a.x = 10;
// OK, because this class derives from A.
b.x = 10;
}
}
L'istruzione a.x = 10
genera un errore perché usata all'interno del metodo statico Main e non in un'istanza della classe B.
I membri struct non possono essere protetti perché struct non può essere ereditato.
Esempio 2
In questo esempio la classe DerivedPoint
è derivata da Point
. Pertanto, è possibile accedere i membri protetti della classe di base direttamente dalla classe derivata.
class Point
{
protected int x;
protected int y;
}
class DerivedPoint: Point
{
static void Main()
{
var dpoint = new DerivedPoint();
// Direct access to protected members.
dpoint.x = 10;
dpoint.y = 15;
Console.WriteLine($"x = {dpoint.x}, y = {dpoint.y}");
}
}
// Output: x = 10, y = 15
Se si impostano i livelli di accesso di x
e y
su privato, il compilatore genererà i messaggi di errore seguenti:
'Point.y' is inaccessible due to its protection level.
'Point.x' is inaccessible due to its protection level.
Specifiche del linguaggio C#
Per altre informazioni, vedere Accessibilità dichiarata in Specifica del linguaggio C#. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.