internal (Referencia de C#)

Actualización: noviembre 2007

La palabra clave internal es un modificador de acceso para tipos y miembros de tipos. 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;
}

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é de ensamblados global (Guía de programación de C#).

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 crear 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.

Nota:

Un método internalvirtual puede invalidarse en algunos lenguajes, como el Lenguaje intermedio de Microsoft (MSIL) textual mediante Ilasm.exe, aunque no se pueda invalidar utilizando C#.

Ejemplo

Este ejemplo contiene dos archivos, Assembly1.cs y Assembly2.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 las secciones siguientes de Especificación del lenguaje C#.

  • 3.5.1 Accesibilidad declarada

  • 3.5.4 Restricciones de accesibilidad

  • 10.3.5 Modificadores de acceso

  • 10.3.8.2 Accesibilidad declarada

Vea también

Conceptos

Guía de programación de C#

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#)

Otros recursos

Referencia de C#