title: Disposing my System.IDisposable object in my finalizer
body: <p>There are several discussions here on StackOverflow about what to do if my object manages other managed objects that implement <code>System.IDisposable</code>.</p>
  
  <p>Note: Below I am <strong>not</strong> talking about <strong>unmanaged</strong> code. I fully understand the importance of cleaning up unmanaged code</p>
  
  <p>Most of the discussions say that if your object owns another managed object that implements <code>System.IDisposable</code>, then you should also implement <code>System.IDisposable</code>, in which case you should call the <code>Dispose()</code> of the disposable objects your object holds. This would be logical, because you don't know whether the disposable object you own uses unmanaged code. You only know that the creator of the other object thought it would be wise if you'd call <code>Dispose</code> as soon as you don't need the object anymore.</p>
  
  <p>A very good explanation of the Disposable pattern was given here on StackOverflow, edited by the community wiki:</p>
  
  <p><a href="https://stackoverflow.com/questions/538060/proper-use-of-the-idisposable-interface">Proper use of the IDisposable interface</a></p>
  
  <p>Quite often, and also in the mentioned link I read: </p>
  
  <blockquote>
    <p>"You don't know the order in which two objects are destroyed. It is entirely possible that in your <code>Dispose()</code> code, the managed object you're trying to get rid of is no longer there."</p>
  </blockquote>
  
  <p>This baffles me, because I thought that as long as any object holds a reference to object X, then object X will not and cannot be finalized. </p>
  
  <p>Or in other words: as long as my object holds a reference to object X I can be certain that object X is not finalized.</p>
  
  <p>If this is true, then why could it be, that if I hold the reference to my object until my finalize, the object I refer to is already finalized?</p>