ключевое слово дружбы С++ позволяет class A назначать class B своим другом. Это позволяет class B получить доступ к private/protected членам class A.
Я никогда не читал ничего о том, почему это было исключено из С# (и VB.NET). Большинство ответов на этот qaru.site/info/21502/..., похоже, говорят, что это полезная часть С++, и есть веские причины для ее использования. По моему опыту, я должен согласиться.
Другим question кажется, что я действительно спрашиваю, как сделать что-то похожее на friend в приложении С#. Хотя ответы обычно вращаются вокруг вложенных классов, это выглядит не так элегантно, как использование ключевого слова friend.
Оригинальная Design Patterns book регулярно использует ее во всех своих примерах.
Итак, вкратце, почему friend отсутствует на С#, и каков способ "лучшей практики" имитировать его на С#?
(Кстати, ключевое слово internal - это не одно и то же, оно позволяет всем классам всей сборки обращаться к членам internal, а friend позволяет дать определенному классу полный доступ к одному другой класс)