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

La palabra clave internal es un modificador de acceso para tipos y miembros de tipo.The internal keyword is an access modifier for types and type members.

Esta página trata sobre el modificador de acceso internal.This page covers internal access. La palabra clave internal también forma parte del modificador de acceso protected internal.The internal keyword is also part of the protected internal access modifier.

Solo se puede tener acceso a los tipos internos o los miembros desde los archivos del mismo ensamblado, como en este ejemplo:Internal types or members are accessible only within files in the same assembly, as in this example:

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

Para obtener una comparación de internal con los demás modificadores de acceso, vea Niveles de accesibilidad y Modificadores de acceso.For a comparison of internal with the other access modifiers, see Accessibility Levels and Access Modifiers.

Para más información sobre los ensamblados, consulte Ensamblados en .NET.For more information about assemblies, see Assemblies in .NET.

Un uso común del acceso interno se da en el desarrollo basado en componentes porque permite que un grupo de componentes cooperen de manera privada sin estar expuesto al resto del código de la aplicación.A common use of internal access is in component-based development because it enables a group of components to cooperate in a private manner without being exposed to the rest of the application code. Por ejemplo, un marco para crear interfaces gráficas de usuario podría proporcionar las clases Control y Form que cooperan mediante miembros con acceso interno.For example, a framework for building graphical user interfaces could provide Control and Form classes that cooperate by using members with internal access. Como estos miembros son internos, no se exponen al código que usa el marco de trabajo.Since these members are internal, they are not exposed to code that is using the framework.

Es un error hacer referencia a un tipo o miembro con acceso interno fuera del ensamblado en el que se definió.It is an error to reference a type or a member with internal access outside the assembly within which it was defined.

EjemploExample

Este ejemplo contiene dos archivos, Assembly1.cs y Assembly1_a.cs.This example contains two files, Assembly1.cs and Assembly1_a.cs. El primer archivo contiene una clase base interna, BaseClass.The first file contains an internal base class, BaseClass. En el segundo archivo, un intento de crear una instancia de BaseClass producirá un error.In the second file, an attempt to instantiate BaseClass will produce an 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  
   }  
}  

EjemploExample

En este ejemplo, use los mismos archivos usados en el ejemplo 1 y cambie el nivel de accesibilidad de BaseClass a public.In this example, use the same files you used in example 1, and change the accessibility level of BaseClass to public. Cambie también el nivel de accesibilidad del miembro IntM a internal.Also change the accessibility level of the member IntM to internal. En este caso, se puede crear una instancia de la clase, pero no se puede tener acceso al miembro interno.In this case, you can instantiate the class, but you cannot access the internal member.

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

Especificación del lenguaje C#C# Language Specification

Para obtener más información, vea la sección Accesibilidad declarada de la Especificación del lenguaje C#.For more information, see Declared accessibility in 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