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