interno (Referência C#)

A internal palavra-chave é um modificador de acesso para tipos e membros do tipo.

Esta página abrange o internal acesso. A internal palavra-chave também faz parte do protected internal modificador de acesso.

Tipos ou membros internos são acessíveis somente dentro de arquivos no mesmo assembly, como neste exemplo:

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

Para obter uma comparação com os outros modificadores de acesso, consulte Níveis de acessibilidade e modificadores de internal acesso.

Um assembly é um executável ou biblioteca de vínculo dinâmico (DLL) produzido a partir da compilação de um ou mais arquivos de origem.

Para obter mais informações sobre assemblies, consulte Assemblies in .NET.

Um uso comum do acesso interno é no desenvolvimento baseado em componentes porque permite que um grupo de componentes coopere de forma privada sem ser exposto ao resto do código do aplicativo. Por exemplo, uma estrutura para a construção de interfaces gráficas do usuário poderia fornecer Control e Form classes que cooperam usando membros com acesso interno. Como esses membros são internos, eles não são expostos ao código que está usando a estrutura.

É um erro fazer referência a um tipo ou membro com acesso interno fora do assembly dentro do qual foi definido.

Exemplo 1

Este exemplo contém dois arquivos Assembly1.cs e Assembly1_a.cs. O primeiro arquivo contém uma classe base interna, BaseClass. No segundo arquivo, uma tentativa de instanciação BaseClass produzirá um erro.

// 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()
   {  
      var myBase = new BaseClass();   // CS0122  
   }  
}  

Exemplo 2

Neste exemplo, use os mesmos arquivos usados no exemplo 1 e altere o nível de acessibilidade de BaseClass para public. Altere também o nível de acessibilidade do membro intM para internal. Nesse caso, você pode instanciar a classe, mas não pode acessar o membro interno.

// 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()
   {  
      var myBase = new BaseClass();   // Ok.  
      BaseClass.intM = 444;    // CS0117  
   }  
}  

Especificação da linguagem C#

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

Consulte também