Оглавление:
Определение - Что означает Friend Assembly?
Дружеская сборка в C # относится к сборке .NET, которая может обращаться к членам другой сборки. Элементы в сборке, доступ к которым осуществляется из сборки друзей, должны быть помечены как
внутренний.
Дружественные сборки используются в сценариях, где требуется доступ к внутренним классам и членам в одной сборке из другой конкретной сборки. Он позволяет двум конкретным сборкам совместно использовать элементы или функции, не делая их общедоступными.
Дружественные сборки также используются в модульном тестировании, когда сборке, лежащей в основе тестового кода, необходим доступ к элементам, помеченным как внутренние в тестируемой сборке. Это полезно при разработке библиотек классов, для которых требуются дополнения, содержащиеся в отдельных сборках, которым требуется доступ к членам в существующих сборках.
Техопедия объясняет дружбу Ассамблеи
Помечая элементы класса как внутренние, они видны другим классам в пределах той же сборки, но являются закрытыми для классов, которые находятся вне сборки. Чтобы получить доступ к внутренним элементам из сборки-друга, необходимо указать имя сборки-друга с атрибутом InternalsVisibleToAttribute в сборке, в которой определены внутренние элементы. Сборка друзей не может получить доступ к закрытым типам и закрытым членам.
Например, атрибут InternalsVisibleToAttribute в сборке X можно использовать для указания сборки Y в качестве вспомогательной сборки, чтобы сборка Y имела доступ ко всем типам и членам сборки X, которые помечены как внутренние.
Ниже приведены рекомендации по разработке сборок друзей:
- При использовании подписанных сборок инструмент sn.exe можно использовать для получения открытого ключа, который необходимо передать атрибуту, указывающему сборку друга.
- При компиляции сборки-друга, которая обращается к внутренним элементам другой сборки, параметр компилятора (/ out) должен быть установлен с именем выходного файла (.exe или .dll)
- Необходимо явно указать каждую сборку, которая должна быть дружественной для сборки, к которой требуется доступ
- Предлагается использовать дружественные сборки без нарушения правил инкапсуляции
