title: Class-behaviour with private fields
body: <p>I encoutered a somewhat (at least for me) strange behaviour in a library I'm building;</p>
  
  <p>I have this method:</p>
  
  <pre><code>public class Lib
  {
   private string field = "field";
  
   public string Field
   {
    get
    {
     return field;
    }
   }
  
   public void Add(Lib lib)
   {
    string field = DoSomething(lib);
    Console.WriteLine(field);
   }
  
   protected string DoSomething(Lib lib)
   {
    return lib.field;
   }
  }
  </code></pre>
  
  <p>So, if I call the method from a program that uses the library:</p>
  
  <pre><code>Lib lib = new Lib();
  Lib lib2 = new Lib();
  
  lib.Add(lib2);
  </code></pre>
  
  <p>The Console gives me <code>"field"</code> as output... Now, I don't quite understand why that happens. I declared the field as private, so why can one class access the other classes' private property and it doesn't give me an Exception about access-restrictions?!</p>
  
  <p>In my understanding, a <code>Lib</code> can access it's own fields anyways, but when I give the method an other instance of <code>Lib</code>, it should not be possible for the first instance to access the seconds' private fields, because... well, because it's an other instance and private!</p>