Модификатор Friend в Visual Basic определяет, что член класса (метод, свойство, переменная) доступен внутри одной сборки, но недоступен вне сборки. Это аналог internal в C#. Такой уровень доступа полезен для обеспечения "скрытости" внутренней реализации кода при открытости публичных API.
Пример использования:
' Внутри одного проекта/сборки Friend Class InternalHelper Friend Sub Log(message As String) Console.WriteLine(message) End Sub End Class
Вызов методов класса InternalHelper будет возможен только в пределах текущей сборки.
Когда применять Friend:
Чем отличается модификатор доступа Friend от Protected? Может ли метод, объявленный как Friend, быть виден в унаследованном классе в другой сборке?
Ответ:
Protected Friend Sub MyMethod() ' Доступен внутри сборки и для наследников вне сборки End Sub
История
В большом проекте вся логика поддерживающих классов была объявлена как Public, что открывало их внешним интеграторам. Перевод на Friend избавил от риска использования внутренних методов вне модуля и упростил сопровождение архитектуры.
История
Из-за ошибки доступа (использовали Protected вместо Friend), вспомогательные методы были недоступны для модульных тестов, размещённых в том же проекте, но вне иерархии классов. Исправили на Friend для поддержки удобного тестирования.
История
One developer tried to use Friend to expose methods to a plug-in loaded from another assembly. В результате плагины не имели доступа к нужным методам. Решение — реализация интерфейсов с Public-методами, Friend использовать только для внутренних нужд.