title: Why are private fields private to the type, not the instance?
body: <p>In C# (and many other languages) it's perfectly legitimate to access private fields of other instances of the same type. For example:</p>
  
  <pre><code>public class Foo
  {
      private bool aBool;
  
      public void DoBar(Foo anotherFoo)
      {
          if (anotherFoo.aBool) ...
      }
  }
  </code></pre>
  
  <p>As the <a href="http://msdn.microsoft.com/en-us/vcsharp/aa336809" rel="noreferrer">C# specification</a> (sections 3.5.1, 3.5.2) states access to private fields is on a type, not an instance. I've been discussing this with a colleague and we're trying to come up with a reason why it works like this (rather than restricting access to the same instance).</p>
  
  <p>The best argument we could come up with is for equality checks where the class may want to access private fields to determine equality with another instance. Are there any other reasons? Or some golden reason that absolutely means it must work like this or something would be completely impossible?</p>