Я использую его в классах для предотвращения использования функций, методов или свойств вне моей сборки.
Внутри сборки Friend
и Public
делают одно и то же, следовательно, это дружественно для разработчика. Но если класс используется из внешней сборки, все, что отмечено Friend
, будет недоступно, тогда как Public
будет.
Эквивалент C # равен internal
. Имя internal
, вероятно, дает лучшее определение, чем Friend
его предполагаемого использования.
Вот произвольный пример. У меня есть DLL, которая содержит кучу пользовательских элементов управления, которые все должны рисовать определенные изображения:
Friend Class ControlDraw
Public Shared Sub DrawArrow(ByVal g As Graphics, ByVal r as Rectangle, _
ByVal ad As ArrowDirection, ByVal ac As Color)
//' Draw Special Arrow:
End Sub
End Class
Я могу использовать этот код во всех элементах управления в моем проекте. Но когда я публикую библиотеку DLL и позволю другим использовать ее, функция DrawArrow недоступна для конечного пользователя, только элементы управления внутри проекта.
Зачем это делать?
Если бы это было Public
, то я бы никогда не смог изменить параметры, потенциально не нарушив каких-либо потребителей функции. Но так как это мой собственный метод, я могу добавить другой параметр для BackColor или чего-либо еще и обновить все свои элементы управления, которые его используют, из моего собственного проекта.
Я в основном говорю, что класс или функция Friend
должны беспокоить меня, а не конечного пользователя. Как только вы делаете что-то Public
для внешнего мира, вы теряете немного контроля над этим.
Также нашел это из ответа Эрика Липперта об использовании Internal
:
Дело не в том, что это осложняет жизнь Бобу. Это то, что он позволяет вам контролировать, какие дорогостоящие обещания дает проект А. в отношении функций, срока службы, совместимости и т. Д.