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. Ainternal
palavra-chave também faz parte doprotected 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#.