В С# (и многих других языках) он вполне законен для доступа к закрытым полям других экземпляров того же типа. Например:
public class Foo
{
private bool aBool;
public void DoBar(Foo anotherFoo)
{
if(anotherFoo.aBool) ...
}
}
Поскольку спецификация С# (разделы 3.5.1, 3.5.2) указывает, что доступ к закрытым полям относится к типу, а не к экземпляру. Я обсуждал это с коллегой, и мы пытаемся найти причину, почему она работает так (вместо того, чтобы ограничивать доступ к одному экземпляру).
Лучший аргумент, который мы могли бы придумать, - это проверки равенства, в которых класс может получить доступ к закрытым полям для определения равенства с другим экземпляром. Есть ли другие причины? Или какой-то золотой разум, который абсолютно означает, что он должен работать так или что-то совершенно невозможно?