Наличие друзей в программировании более или менее считается «грязным» и легко злоупотреблять. Это нарушает отношения между классами и подрывает некоторые фундаментальные атрибуты языка OO.
Это, как говорится, хорошая функция, и я использовал ее много раз на C ++; и хотел бы использовать его в C # тоже. Но я держал пари из-за «чистого» OOness C # (по сравнению с псевдо-OOness C ++). MS решила, что, поскольку Java не имеет ключевого слова для друга, C # тоже не должен (просто шутите;))
На серьезной ноте: внутренняя не так хороша, как друг, но она выполняет свою работу. Помните, что редко вы будете распространять свой код сторонним разработчикам не через DLL; так что, пока вы и ваша команда узнаете о классах друзей и их использовании, вы должны быть в порядке.
EDIT Позвольте мне пояснить, как ключевое слово friend подрывает ООП.
Частные и защищенные переменные и методы, возможно, являются одной из наиболее важных составляющих ООП. Идея о том, что объекты могут хранить данные или логику, которые только они могут использовать, позволяет вам написать свою реализацию функциональных возможностей независимо от вашей среды - и что ваша среда не может изменять информацию о состоянии, которую она не подходит для обработки. Используя друга, вы комбинируете реализацию двух классов вместе, что намного хуже, если вы просто связали их интерфейс.