private protected (Referencia de C#)private protected (C# Reference)

La combinación de palabras claves private protected es un modificador de acceso de miembro.The private protected keyword combination is a member access modifier. Los miembros private protected están accesibles para los tipos que se deriven de la clase contenedora, pero solo desde dentro del ensamblado correspondiente que lo contenga.A private protected member is accessible by types derived from the containing class, but only within its containing assembly. Para obtener una comparación de private protected con los demás modificadores de acceso, vea Niveles de accesibilidad.For a comparison of private protected with the other access modifiers, see Accessibility Levels.

Nota

El modificador de acceso private protected es válido en C# versión 7.2 y versiones posteriores.The private protected access modifier is valid in C# version 7.2 and later.

EjemploExample

Se puede tener acceso a un miembro private protected de una clase base desde tipos derivados en el ensamblado que lo contiene solo si el tipo estático de la variable es el tipo de clase derivada.A private protected member of a base class is accessible from derived types in its containing assembly only if the static type of the variable is the derived class type. Por ejemplo, vea el siguiente segmento de código:For example, consider the following code segment:

// Assembly1.cs  
// Compile with: /target:library  
public class BaseClass
{
    private protected int myValue = 0;
}

public class DerivedClass1 : BaseClass
{
    void Access()
    {
        BaseClass 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;
    }
}

Este ejemplo contiene dos archivos, Assembly1.cs y Assembly2.cs.This example contains two files, Assembly1.cs and Assembly2.cs. El primer archivo contiene una clase base pública, BaseClass, y un tipo derivado de ella, DerivedClass1.The first file contains a public base class, BaseClass, and a type derived from it, DerivedClass1. BaseClass posee un miembro private protected, myValue, al que DerivedClass1 intenta tener acceso de dos maneras.BaseClass owns a private protected member, myValue, which DerivedClass1 tries to access in two ways. El primer intento de acceso a myValue a través de una instancia de BaseClass generará un error.The first attempt to access myValue through an instance of BaseClass will produce an error. En cambio, el intento de usarlo como un miembro heredado en DerivedClass1 se realizará correctamente.However, the attempt to use it as an inherited member in DerivedClass1 will succeed. En el segundo archivo, un intento de tener acceso a myValue como un miembro heredado de DerivedClass2 generará un error, ya que solo está accesible para los tipos derivados en Assembly1.In the second file, an attempt to access myValue as an inherited member of DerivedClass2 will produce an error, as it is only accessible by derived types in Assembly1.

Los miembros de struct no pueden ser private protected, porque los structs no se heredan.Struct members cannot be private protected because the struct cannot be inherited.

Especificación del lenguaje C#C# language specification

Para obtener más información, consulte la Especificación del lenguaje C#.For more information, see the C# Language Specification. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.The language specification is the definitive source for C# syntax and usage.

Vea tambiénSee also