Доступ к личным данным родного брата может показаться неправильным, если сформулировать как:
public void ExamineStudentsMembers(Student anotherStudent) {
//this seems very wrong
Console.WriteLine(anotherStudent._studentsPrivateMember);
}
Однако, это не кажется странным для методов, которые требуют такого рода функциональности. Какие методы требуют доступа к личным данным родного брата? Методы сравнения (в частности, равно) и объекты в структуре данных (например, дерево или связанный список).
Методы сравнения часто сравнивают личные данные напрямую, а не только публичные данные.
Для класса узлов, которые составляют связанный список, граф или дерево, возможность доступа к личным данным родного брата - это именно то, что нужно. Известный код (часть класса) может возиться со структурой данных, но код вне структуры данных не может касаться внутренних элементов.
Интересно отметить, что эти два случая менее распространены в повседневном программировании, чем когда впервые была разработана эта языковая функция. Еще в 1990-х и начале 2000-х годов в C ++ было бы гораздо чаще создавать собственные структуры данных и методы сравнения. Возможно, сейчас самое время пересмотреть вопрос о частных членах.