Sommario:
Definizione - Cosa significa Assemblea degli amici?
Un assembly amico, in C #, fa riferimento all'assembly .NET che può accedere ai membri di un altro assembly. I membri di un assembly a cui si accede dall'assembly amico devono essere contrassegnati come
interno.
Gli assembly degli amici vengono utilizzati in scenari in cui è necessario accedere a classi e membri interni in un assembly da un altro assembly specifico. Consente a due assiemi specifici di condividere membri o funzionalità senza renderli pubblici.
Gli assiemi di amici vengono utilizzati anche nel test di unità in cui l'assieme sottostante il codice di test deve accedere ai membri che sono contrassegnati come interni nell'assieme da testare. È utile nello sviluppo di librerie di classi che richiedono aggiunte contenute in assiemi separati che devono accedere ai membri negli assiemi esistenti.
Techopedia spiega Friend Assembly
Contrassegnando i membri di una classe come interni, sono visibili ad altre classi all'interno dello stesso assembly ma sono privati per le classi che risiedono all'esterno dell'assembly. Per accedere ai membri interni da un assembly amico, è necessario specificare il nome dell'assembly amico con l'attributo InternalsVisibleToAttribute nell'assembly in cui sono definiti i membri interni. L'assembly degli amici non può accedere a tipi e membri privati.
Ad esempio, InternalsVisibleToAttribute in Assembly X può essere utilizzato per specificare l'Assemblea Y come gruppo amico, in modo che l'Assemblea Y possa accedere a tutti i tipi e membri dell'Assemblea X contrassegnati come interni.
Di seguito sono riportate le linee guida relative allo sviluppo di assemblee di amici:
- Durante l'utilizzo di assembly firmati, lo strumento "sn.exe" può essere utilizzato per ottenere la chiave pubblica che deve essere passata all'attributo che specifica l'assembly amico
- Durante la compilazione di un assembly amico che accede ai membri interni di un altro assembly, l'opzione del compilatore (/ out) deve essere impostata con il nome del file di output (.exe o .dll)
- È necessario specificare esplicitamente ogni assembly che deve essere amico dell'assembly a cui deve accedere
- Si suggerisce di utilizzare le assemblee di amici senza infrangere le regole dell'incapsulamento
