internal (Referência de C#)internal (C# Reference)

A palavra-chave internal é um modificador de acesso para tipos e membros de tipo.The internal keyword is an access modifier for types and type members.

Esta página aborda internal acesso.This page covers internal access. O internal palavra-chave também é parte do protected internal modificador de acesso.The internal keyword is also part of the protected internal access modifier.

Tipos ou membros internos são acessíveis somente em arquivos no mesmo assembly, como neste exemplo: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 obter uma comparação de internal com os outros modificadores de acesso, consulte Níveis de acessibilidade e Modificadores de acesso.For a comparison of internal with the other access modifiers, see Accessibility Levels and Access Modifiers.

Para obter mais informações sobre assemblies, consulte Assemblies e o cache de assembly global.For more information about assemblies, see Assemblies and the Global Assembly Cache.

Um uso comum do acesso interno é no desenvolvimento baseado em componente, porque ele permite que um grupo de componentes colabore de maneira particular, sem serem expostos para o restante do código do aplicativo.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 exemplo, uma estrutura para a criação de interfaces gráficas do usuário pode fornecer as classes Control e Form, que cooperam através do uso de membros com acesso interno.For example, a framework for building graphical user interfaces could provide Control and Form classes that cooperate by using members with internal access. Uma vez que esses membros são internos, eles não são expostos ao código que está usando a estrutura.Since these members are internal, they are not exposed to code that is using the framework.

É um erro fazer referência a um tipo ou um membro com acesso interno fora do assembly no qual ele foi definido.It is an error to reference a type or a member with internal access outside the assembly within which it was defined.

ExemploExample

Este exemplo contém dois arquivos, Assembly1.cs e Assembly1_a.cs.This example contains two files, Assembly1.cs and Assembly1_a.cs. O primeiro arquivo contém uma classe base interna BaseClass.The first file contains an internal base class, BaseClass. No segundo arquivo, uma tentativa de instanciar a BaseClass produzirá um erro.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  
   }  
}  

ExemploExample

Neste exemplo, use os mesmos arquivos que você usou no exemplo 1 e altere o nível de acessibilidade da BaseClass para public.In this example, use the same files you used in example 1, and change the accessibility level of BaseClass to public. Também altere o nível de acessibilidade do membro IntM para internal.Also change the accessibility level of the member IntM to internal. Nesse caso, você pode instanciar a classe, mas não pode acessar o membro 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:Assembly1.dll  
public class TestAccess   
{  
   static void Main()   
   {  
      BaseClass myBase = new BaseClass();   // Ok.  
      BaseClass.intM = 444;    // CS0117  
   }  
}  

Especificação da Linguagem C#C# Language Specification

Para obter mais informações, consulte a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte tambémSee Also

Referência de C#C# Reference
Guia de Programação em C#C# Programming Guide
Palavras-chave do C#C# Keywords
Modificadores de acessoAccess Modifiers
Níveis de acessibilidadeAccessibility Levels
ModificadoresModifiers
publicpublic
privateprivate
protectedprotected