Compartilhar via


interno (Referência de C#)

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

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

Tipos ou membros internos só podem ser acessados em 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 entre os outros modificadores de internal acesso, consulte Os Níveis de Acessibilidade e modificadores de acesso.

Uma assembly DLL (biblioteca de link dinâmico) ou executável é produzida com base na compilação de um ou mais arquivos de origem.

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

Um uso comum do acesso interno está no desenvolvimento baseado em componentes porque permite que um grupo de componentes coopere de maneira privada sem ser exposto ao restante do código do aplicativo. Por exemplo, uma estrutura para a criação de interfaces gráficas do usuário pode 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 referenciar um tipo ou um membro com acesso interno fora do assembly no qual ele 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 instanciar 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 para BaseClasspublic. Altere também o nível de acessibilidade do membro intM para internal. Nesse caso, você pode criar uma instância da 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 A acessibilidade declarada na Especificação da Linguagem C#. A especificação de idioma é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também