title: What does immutable and readonly mean in C#?
body: <p>Is it correct that it is not possible to change the value of an immutable object?</p>
  
  <p>I have two scenarios regarding <code>readonly</code> that I want to understand:</p>
  
  <ol>
  <li><p>What if I have a collection and mark it as <code>readonly</code>, like the following. Can I still call <code>_items.Add</code>? </p>
  
  <pre><code>private readonly ICollection&lt;MyItem&gt; _items;
  </code></pre></li>
  <li><p>And also for the following variable, if later on I call <code>_metadata.Change</code> which will change the internal values of a couple member variable in the <code>Metadata</code> instance. Is <code>_metadata</code> still immutable? </p>
  
  <pre><code>private readonly Metadata _metadata;
  </code></pre></li>
  </ol>
  
  <p>For both variables above, I totally understand that I can't directly assign new values to them outside of initializer and constructors.</p>