Índice:
Definição - O que significa Friend Assembly?
Um assembly amigo, em C #, refere-se ao assembly .NET que pode acessar os membros de outro assembly. Os membros de uma assembléia que são acessados da assembléia de amigos precisam ser marcados como
interno.
As assembléias de amigos são usadas em cenários em que é necessário acessar classes e membros internos em uma assembléia a partir de outra assembléia específica. Ele permite que dois assemblies específicos compartilhem membros ou funcionalidades sem torná-los públicos.
As montagens de amigos também são usadas no teste de unidade, onde a montagem subjacente ao código de teste precisa acessar os membros marcados como internos na montagem a ser testada. É útil no desenvolvimento de bibliotecas de classes que requerem adições contidas em assemblies separados que precisam acessar membros em assemblies existentes.
Techopedia explica montagem de amigos
Marcando membros de uma classe como internos, eles são visíveis para outras classes dentro do mesmo assembly, mas são particulares para classes que residem fora do assembly. Para acessar os membros internos de um assembly amigo, o nome do assembly amigo deve ser especificado com o atributo InternalsVisibleToAttribute no assembly em que os membros internos estão definidos. A montagem de amigos não pode acessar tipos privados e membros privados.
Por exemplo, InternalsVisibleToAttribute no Assembly X pode ser usado para especificar o Assembly Y como assembly amigo, para que o Assembly Y possa acessar todos os tipos e membros do Assembly X marcados como internos.
A seguir, estão as diretrizes relacionadas ao desenvolvimento de assembléias de amigos:
- Ao usar assemblies assinados, a ferramenta 'sn.exe' pode ser usada para obter a chave pública que deve ser passada para o atributo que especifica o assembly de amigo
- Ao compilar um assembly amigo que acessa membros internos de outro assembly, a opção do compilador (/ out) deve ser definida com o nome do arquivo de saída (.exe ou .dll)
- É necessário especificar explicitamente cada montagem que precisa ser amiga da montagem à qual precisa acessar
- Sugere-se usar assembléias de amigos sem violar as regras de encapsulamento
