Condividi tramite


protected (Riferimento C#)

La protected parola chiave è un modificatore di accesso ai membri.

Annotazioni

Questa pagina illustra protected l'accesso. La protected parola chiave fa anche parte dei protected internal modificatori di accesso e private protected .

Un membro protetto è accessibile all'interno della relativa classe e dalle istanze della classe derivata.

Per un confronto con gli altri modificatori di protected accesso, vedere Livelli di accessibilità.

Esempio 1

Un membro protetto di una classe base è accessibile in una classe derivata solo se l'accesso avviene tramite il tipo di classe derivata. Si consideri ad esempio il segmento di codice 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 through
        // the derived class type, not through the base class type.
        // a.x = 10;

        // OK, because this class derives from A.
        b.x = 10;
    }
}

L'istruzione a.x = 10 genera un errore perché accede al membro protetto tramite un riferimento alla classe di base (a è di tipo A). È possibile accedere ai membri protetti solo tramite il tipo di classe o i tipi derivati da esso.

I membri dello struct non possono essere protetti perché lo struct non può essere ereditato.

Esempio 2

In questo esempio la classe DerivedPoint è derivata da Point. Pertanto, è possibile accedere ai membri protetti della classe 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 modificano i livelli di accesso di x e y in privato, il compilatore genererà i messaggi di errore:

'Point.y' is inaccessible due to its protection level.

'Point.x' is inaccessible due to its protection level.

Specificazione del linguaggio C#

Per altre informazioni, vedere Accessibilità dichiarata nella specifica del linguaggio C#. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.

Vedere anche