Partilhar via


interna (referência a C#)

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

A referência da linguagem C# documenta a versão mais recentemente lançada da linguagem C#. Contém também documentação inicial para funcionalidades em versões preliminares públicas para a próxima versão da linguagem.

A documentação identifica qualquer funcionalidade introduzida pela primeira vez nas últimas três versões da língua ou em pré-visualizações públicas atuais.

Sugestão

Para saber quando uma funcionalidade foi introduzida pela primeira vez em C#, consulte o artigo sobre o histórico de versões da linguagem C#.

Observação

Este artigo aborda internal o acesso. A internal palavra-chave também faz parte do protected internal modificador de acesso.

Pode aceder a tipos internos ou membros apenas dentro de ficheiros na mesma assembleia, como mostrado no seguinte 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 internal e modificadores de 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 estes membros são internos, não estão expostos a código que utilize o framework.

É um erro referenciar um tipo ou membro com acesso interno fora do assembly onde o definiste.

Examples

Este exemplo contém dois arquivos Assembly1.cs e Assembly1_a.cs. O primeiro arquivo contém uma classe base interna, BaseClass. No segundo ficheiro, uma tentativa de instanciar BaseClass produz 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
   }
}

Neste exemplo, use os mesmos ficheiros que usou no primeiro exemplo, mas altere o nível de acessibilidade de BaseClass para public. Altere também o nível de acessibilidade do membro intM para internal. Neste caso, podes instanciar a classe, mas não podes aceder ao 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#.

Ver também