internal (C# Reference)
O internal palavra-chave é um modificador de acesso para tipos e membros de tipo. Tipos internos ou membros são acessíveis somente nos arquivos no mesmo conjunto, como no exemplo:
public class BaseClass
{
// Only accessible within the same assembly
internal static int x = 0;
}
Tipos ou membros que têm o modificador de acesso protected internal podem ser acessados a partir de conjunto atual ou tipos que derivam da classe de recipiente.
Para obter uma comparação de internal com outros modificadores de acesso, consulte Accessibility Levels (C# Reference) e Access Modifiers (C# Programming Guide).
Para obter mais informações sobre assemblies, consulte Assemblies e o Cache de Assembly Global (C# e Visual Basic).
Um uso comum de acesso interno é no desenvolvimento baseado em componentes porque ela permite que um grupo de componentes para cooperar de uma forma particular sem expostas para o resto do código do aplicativo. Por exemplo, uma estrutura para a criação de interfaces gráficas do usuário poderia fornecer Control e Form classes que cooperam com o uso de membros com acesso interno. Como esses membros são internos, eles não são expostos ao código que está usando a estrutura.
Ele é um erro para fazer referência um tipo ou um membro com acesso interno fora o conjunto no qual ele foi definido.
Observação |
---|
Um internal virtual método pode ser substituído em alguns idiomas, como, por exemplo, textual Microsoft intermediate language (MSIL) usando o Ilasm. exe, mesmo que não pode ser substituída usando o C#. |
Exemplo
Este exemplo contém dois arquivos, Assembly1.cs e Assembly1_a.cs. O primeiro arquivo contém uma classe base interna, BaseClass. No arquivo segundo, uma tentativa de instanciar BaseClass 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
}
}
Neste exemplo, use os mesmos arquivos usada no exemplo 1 e alterar o nível de acessibilidade de BaseClass para public. Também alterar o nível de acessibilidade do membro IntM para internal. Nesse caso, você pode instanciar a 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 C# Language Specification A especificação de linguagem é a fonte definitiva para a sintaxe e o uso de C#.
Consulte também
Referência
Access Modifiers (C# Reference)
Accessibility Levels (C# Reference)