internal (Referencia de C#)

La palabra clave internal es modificador de acceso para los tipos y miembros de tipo.Los tipos o miembros internos sólo son accesibles dentro de los archivos del mismo ensamblado, como en este ejemplo:

public class BaseClass 
{
    // Only accessible within the same assembly
    internal static int x = 0;
}

El acceso a los tipos o miembros que tienen el modificador de acceso protected internal se puede realizar desde el ensamblado actual o desde tipos derivados de la clase contenedora.

Para obtener una comparación de internal con el resto de los modificadores de acceso, vea Niveles de accesibilidad (Referencia de C#) y Modificadores de acceso (Guía de programación de C#).

Para obtener más información sobre los ensamblados, vea Ensamblados y caché global de ensamblados (C# y Visual Basic).

Un uso habitual del acceso de tipo interno se da en el desarrollo basado en componentes, ya que permite a un grupo de componentes cooperar de manera privada sin estar expuesto al resto del código de la aplicación.Por ejemplo, un marco de trabajo para compilar interfaces gráficas de usuario podría proporcionar clases Control y Form que cooperan mediante miembros con acceso interno.Como estos miembros son internos, no están expuestos al código que utiliza la estructura.

Si se hace referencia a un tipo o miembro con acceso interno fuera del ensamblado en el que se definió, produce un error.

Ejemplo

Este ejemplo contiene dos archivos, Assembly1.cs y Assembly1_a.cs.El primer archivo contiene una clase base interna, BaseClass.En el segundo archivo, un intento de crear instancias BaseClass generará un error.

// Assembly1.cs
// Compile with: /target:library
internal class BaseClass 
{
   public static int intM = 0;
}

// Assembly1_a.cs
// Compile with: /reference:Assembly1.dll
class TestAccess 
{
   static void Main() 
   {
      BaseClass myBase = new BaseClass();   // CS0122
   }
}

En este ejemplo, utilice los mismos archivos que utilizó en el primer ejemplo y cambie el nivel de accesibilidad de BaseClass a public.Además cambie el nivel de accesibilidad del miembro IntM a internal.En este caso, puede crear instancias de la clase, pero no puede tener acceso al miembro interno.

// Assembly2.cs
// Compile with: /target:library
public class BaseClass 
{
   internal static int intM = 0;
}

// Assembly2_a.cs
// Compile with: /reference:Assembly1.dll
public class TestAccess 
{
   static void Main() 
   {
      BaseClass myBase = new BaseClass();   // Ok.
      BaseClass.intM = 444;    // CS0117
   }
}

Especificación del lenguaje C#

Para obtener más información, vea 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

Referencia

Palabras clave de C#

Modificadores de acceso (Referencia de C#)

Niveles de accesibilidad (Referencia de C#)

Modificadores (Referencia de C#)

public (Referencia de C#)

private (Referencia de C#)

protected (Referencia de C#)

Conceptos

Guía de programación de C#

Otros recursos

Referencia de C#