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

La combinación de palabras claves protected internal es un modificador de acceso de miembro.The protected internal keyword combination is a member access modifier. Se puede obtener acceso a un miembro protected internal desde el ensamblado actual o desde tipos que se deriven de la clase contenedora.A protected internal member is accessible from the current assembly or from types that are derived from the containing class. Para obtener una comparación de protected internal con los demás modificadores de acceso, vea Niveles de accesibilidad.For a comparison of protected internal with the other access modifiers, see Accessibility Levels.

EjemploExample

Se puede obtener acceso a un miembro protected internal de una clase base desde cualquier tipo de ensamblado que lo contenga.A protected internal member of a base class is accessible from any type within its containing assembly. También estará accesible en una clase derivada ubicada en otro ensamblado, pero solo si el acceso se produce a través de una variable del tipo de clase derivada.It is also accessible in a derived class located in another assembly only if the access occurs through a variable of 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
{
   protected internal int myValue = 0;
}

class TestAccess
{
    void Access()
    {
        var baseObject = new BaseClass();
        baseObject.myValue = 5;
    }
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass : BaseClass
{
    static void Main()
    {
        var baseObject = new BaseClass();
        var derivedObject = new DerivedClass();

        // Error CS1540, because myValue can only be accessed by
        // classes derived from BaseClass.
        // baseObject.myValue = 10;

        // OK, because this class derives from BaseClass.
        derivedObject.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 interna, BaseClass, y otra clase, TestAccess.The first file contains a public base class, BaseClass, and another class, TestAccess. BaseClass posee un miembro protected internal (myValue), al que se obtiene acceso por medio del tipo TestAccess.BaseClass owns a protected internal member, myValue, which is accessed by the TestAccess type. En el segundo archivo, un intento de tener acceso a myValue a través de una instancia de BaseClass generará un error, mientras que un acceso a este miembro a través de una instancia de una clase derivada (DerivedClass) se realizará correctamente.In the second file, an attempt to access myValue through an instance of BaseClass will produce an error, while an access to this member through an instance of a derived class, DerivedClass will succeed.

Los miembros de struct no pueden ser protected internal, porque los structs no se heredan.Struct members cannot be protected internal 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