Как смоделировать друга C ++ в C # и VB.NET?

Потому что иногда мне действительно нужен друг.

Я могу придумать следующие уловки:

  1. Обертка только для чтения - например, ReadOnlyCollection . Друг сохраняет указатель на изменяемый объект, в то время как все остальные могут получить доступ только к оболочке.
  2. Запись делегата - друг дает конструктору объекта ссылку на делегат в качестве одного из параметров, конструктор заполняет его обратиться к частному методу, который можно использовать для модификации объекта.
  3. Отражение - очевидно, плохая идея. Включено для полноты.
  4. Несколько сборок - объедините своих друзей в отдельную сборку и установите методы-модификаторы internal .
  5. Выставьте изменяемый объект, но добавьте комментарии к методам-модификаторам » EditorBrowsableState.Never) для члена, к которому должен иметь доступ только друг, чтобы скрыть его от IntelliSense.
  6. Неявная реализация интерфейса - см. Комментарии.

Является ли этот список исчерпывающим? Может ли кто-нибудь отсортировать их по убыванию производительности? Порядок уменьшения опрятности? Есть предложения, когда использовать какой?

7
задан Community 23 May 2017 в 12:33
поделиться