Il modificatore Friend in Visual Basic definisce che un membro di classe (metodo, proprietà, variabile) è accessibile all'interno di un assembly ma non al di fuori di esso. Questo è analogo a internal in C#. Questo livello di accesso è utile per garantire la "nascondibilità" dell'implementazione interna del codice mantenendo aperti gli API pubblici.
Esempio di utilizzo:
' All'interno di un progetto/assembly Friend Class InternalHelper Friend Sub Log(message As String) Console.WriteLine(message) End Sub End Class
La chiamata ai metodi della classe InternalHelper sarà possibile solo all'interno dell'assembly corrente.
Quando utilizzare Friend:
Qual è la differenza tra il modificatore di accesso Friend e Protected? Un metodo dichiarato come Friend può essere visibile in una classe ereditata in un'altra assembly?
Risposta:
Protected Friend Sub MyMethod() ' Accessibile all'interno dell'assembly e per gli eredi al di fuori dell'assembly End Sub
Storia
In un grande progetto, tutta la logica delle classi di supporto era dichiarata come Public, il che la rendeva aperta agli integratori esterni. La conversione a Friend ha eliminato il rischio di utilizzo di metodi interni al di fuori del modulo e ha semplificato la manutenzione dell'architettura.
Storia
A causa di un errore di accesso (è stato usato Protected al posto di Friend), i metodi ausiliari non erano accessibili per i test modulari, che erano collocati nello stesso progetto, ma al di fuori della gerarchia di classi. È stato corretto in Friend per supportare test più agevoli.
Storia
One developer tried to use Friend to expose methods to a plug-in loaded from another assembly. As a result, the plug-ins did not have access to the necessary methods. The solution was to implement interfaces with Public methods, using Friend only for internal needs.