internal (Referência de C#)

A palavra-chave de internal é modificador de acesso para tipos e membros do tipo. Tipos e membros internos são acessíveis somente dentro dos arquivos no mesmo assembly, como em este exemplo:

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

Tipos e membros que têm o modificador de acesso protected internal podem ser acessados do assembly atual ou dos tipos que são derivados da classe recipiente.

Para uma comparação de internal com os outros modificadores de acesso, consulte Níveis de acessibilidade (Referência de C#) e Modificadores de acesso (Guia de Programação em C#).

Para obter mais informações sobre assemblies, consulte Assemblies e o cache de assemblies global (C# e Visual Basic).

Um uso comum de acesso em desenvolvimento interno é baseado em componentes porque ela permite que um grupo de componentes para cooperar de uma maneira particular sem ser exposta para o resto do código do aplicativo. Por exemplo, uma estrutura para criar interfaces de usuário gráficas pode fornecer Control e as classes de Form que cooperam usando membros com acesso interno. Como esses membros são compilados, não são expostos a código que é a estrutura.

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

Exemplo

Este exemplo contém dois arquivos, Assembly1.cs e _a.csde Assembly1. O primeiro arquivo contém uma classe base interna, BaseClass. Em o segundo arquivo, uma tentativa de criar uma instância BaseClass irá gerar 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() 
   {
      BaseClass myBase = new BaseClass();   // CS0122
   }
}

Em esse exemplo, use os mesmos arquivos que você usou no exemplo 1, e altere a acessibilidade no nível de BaseClass a public. Também alterar a acessibilidade no nível do membro IntM a internal. Em esse caso, você pode criar uma instância da classe, mas você 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:Assembly1.dll
public class TestAccess 
{
   static void Main() 
   {
      BaseClass myBase = new BaseClass();   // Ok.
      BaseClass.intM = 444;    // CS0117
   }
}

Especificação da linguagem C#

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ém

Referência

Palavras-chave C#

Modificadores de acesso (Referência de C#)

Níveis de acessibilidade (Referência de C#)

Modificadores (Referência de C#)

public (Referência de C#)

private (Referência de C#)

protected (Referência de C#)

Conceitos

Guia de Programação em C#

Outros recursos

Referência de C#