Exportar (0) Imprimir
Expandir todo

internal (Referencia de C#)

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

Encontrará una comparación de internal con los otros modificadores de acceso en Niveles de accesibilidad 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, una estructura para crear interfaces gráficas de usuario podría proporcionar clases Control y Form que cooperan mediante miembros con acceso de tipo internal. 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.

NoteNota

El método internal virtual puede reemplazarse en algunos lenguajes, como en el Lenguaje intermedio de Microsoft (MSIL) textual mediante Ilasm.exe, aunque no se pueda reemplazar utilizando C#.

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

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.2.3 Modificadores de acceso

  • 10.2.6.2 Accesibilidad declarada

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft