Потому что иногда мне действительно нужен друг.
Я могу придумать следующие уловки:
- Обертка только для чтения - например, ReadOnlyCollection . Друг сохраняет указатель на изменяемый объект, в то время как все остальные могут получить доступ только к оболочке.
- Запись делегата - друг дает конструктору объекта ссылку на делегат в качестве одного из параметров, конструктор заполняет его обратиться к частному методу, который можно использовать для модификации объекта.
- Отражение - очевидно, плохая идея. Включено для полноты.
- Несколько сборок - объедините своих друзей в отдельную сборку и установите методы-модификаторы
internal
.
- Выставьте изменяемый объект, но добавьте комментарии к методам-модификаторам »
EditorBrowsableState.Never) для члена, к которому должен иметь доступ только друг, чтобы скрыть его от IntelliSense.
- Неявная реализация интерфейса - см. Комментарии.
Является ли этот список исчерпывающим? Может ли кто-нибудь отсортировать их по убыванию производительности? Порядок уменьшения опрятности? Есть предложения, когда использовать какой?
задан Community 23 May 2017 в 12:33
поделиться