protected (Referencia de C#)

La palabra clave protected es un modificador de acceso de miembro.

Nota:

Esta página trata sobre el modificador de acceso protected. La palabra clave protected también forma parte de los modificadores de acceso protected internal y private protected.

Un miembro protegido es accesible dentro de su clase y por parte de instancias de clase derivadas.

Para obtener una comparación de protected con los demás modificadores de acceso, vea Niveles de accesibilidad.

Ejemplo 1

Un miembro protegido de una clase base es accesible en una clase derivada únicamente si el acceso se produce a través del tipo de clase derivada. Por ejemplo, vea el siguiente segmento de código:

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;
    }
}

La instrucción a.x = 10 genera un error porque se ha creado en el método estático Main y no en una instancia de clase B.

Los miembros de estructura no se pueden proteger porque la estructura no puede heredarse.

Ejemplo 2

En este ejemplo, la clase DerivedPoint se deriva de Point. Por lo tanto, puede acceder a los miembros protegidos de la clase base directamente desde la clase derivada.

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

Si cambia los niveles de acceso de x y y a private, el compilador genera los mensajes de error:

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

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

Especificación del lenguaje C#

Para obtener más información, vea la sección Accesibilidad declarada de la Especificación del lenguaje C#. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.

Vea también