Resumo : neste tutorial, você aprenderá a usar a internal
palavra-chave C# para restringir tipos e seus membros para serem acessíveis no mesmo assembly.
Introdução à palavra-chave interna C#
No .NET, um assembly é um pacote de código e recursos que o tempo de execução do .NET pode implantar, versionar e executar, e os desenvolvedores podem usar para criar aplicativos ou bibliotecas.
Para criar um assembly a partir do código, você compila o código em um arquivo DLL
ou EXE
arquivo. Então, você ou outros desenvolvedores poderão fazer referência ao assembly de outro projeto.
A palavra-chave C# internal
especifica que tipos como classes e interfaces ou membros de tipos devem ser acessíveis apenas dentro do mesmo assembly, também conhecido como escopo de assembly. Em outras palavras, se um tipo ou membro de um tipo estiver marcado como internal
, outros assemblies não poderão acessá-lo diretamente.
A internal
palavra-chave permite ocultar efetivamente os detalhes da implementação. Também garante que sua biblioteca seja usada conforme pretendido, sem expor os detalhes internos a montagens externas. Isso torna seu código mais sustentável e seguro.
Digamos que você desenvolva uma biblioteca C# chamada MyLib
que contém uma Utility
classe que deseja usar em seus projetos dentro da mesma solução. Mas você não quer que outros desenvolvedores acessem a Utility
classe e seus métodos a partir de seus assemblies fora da sua biblioteca.
Para fazer isso, você pode usar a internal
palavra-chave da Utility
classe e seu método assim:
namespace MyLib
{
internal class Utility
{
internal static void Calculate()
{
}
}
class MyClass
{
public static void DoSomething()
{
Utility.Calculate();
// ...
}
}
}
Linguagem de código: C# ( cs )
Neste exemplo, marcamos a Utility
classe e seu Calculate()
método como internal
. Isso significa que só permitimos acesso a eles dentro do mesmo assembly ( MyLib
projeto).
Por outro lado, marcamos o MyClass
como public
, o que significa que permitimos que outros assemblies façam referência ao MyClass
.
É importante observar que se você tentar acessar a Utility
classe ou seu Calculate()
método a partir de outro assembly, ocorrerá um erro de compilação.
Interno Protegido
O protected internal
modificador de acesso é uma combinação dos modificadores protected
e internal
. O protected internal
permite acesso a membros de dentro do mesmo assembly, bem como de classes derivadas em qualquer assembly, mais especificamente:
- Um
protected internal
membro pode ser acessado de qualquer classe dentro do mesmo assembly, assim como uminternal
membro. - Um
protected internal
membro também pode ser acessado de uma classe derivada em qualquer assembly, assim como umprotected
membro.
Aqui está um exemplo de uso do protected internal
modificador de acesso:
// Assembly1
namespace MyLib;
public class MyBaseClass
{
protected internal int MyProtectedInternalField;
}
public class MyDerivedClass: MyBaseClass
{
public void DoSomething()
{
var value = MyProtectedInternalField;
Console.WriteLine(value);
}
}
Linguagem de código: C# ( cs )
Neste exemplo, the MyBaseClass
tem um protected internal
membro. Portanto, podemos acessá-lo a partir do DoSomething()
método da classe derivada dentro do mesmo assembly.
// Assembly2
using MyLib;
namespace MyLib2;
public class MyClass : MyDerivedClass
{
public void MyMethod()
{
// reference the protected internal field
// from the MyDerivedClass in another assembly
var value = MyProtectedInternalField;
//...
}
}
Linguagem de código: C# ( cs )
Nesta montagem, definimos o MyClass
que estende a MyDerivedClass
classe de Assembly1
.
O MyMethod()
do MyClass
pode acessar o MyProtectedInternalField
membro do MyDerivedClass
do Assembly1
.
Resumo
- Use a
internal
palavra-chave C# para permitir que tipos e seus membros sejam acessíveis no mesmo assembly. - Use o
protected internal
modificador para permitir que um membro seja acessado dentro do mesmo assembly, bem como da classe derivada do mesmo ou de outro assembly.