title: Should IDisposable::Dispose() be virtual
body: <p>Say a factory for SomeDisposable actually is creating/returning a sort of watch dog Wrapper</p>
  
  <pre><code>public class Wrapper : SomeDisposable
  {
      public new /*:(*/ Dispose() { ... };
  }
  </code></pre>
  
  <p>and the caller uses like</p>
  
  <pre><code>using (SomeDisposable sd = SomeDisposableFactory.Create(...))
  {
  } // Wrapper.Dispose() never called.
  </code></pre>
  
  <p>The <code>Wrapper.Dispose()</code> is never called.  If <code>Dispose()</code> were virtual then <code>Wrapper.Dispose()</code> would be called.  </p>
  
  <p>The <code>IDisposable</code> interface does not guarantee that the other best practice method <code>virtual Dispose(bool)</code> actually exists or enforce that either be virtual so it cannot be generally relied on to exist (it is only a recommended pattern).  Interfaces currently do not allow constraints on virtual.</p>
  
  <p>What are some pros and cons for not making the recommended <code>Dispose()</code> pattern virtual which would have solved this particular dilemma.  Should C# allow a way of forcing virtual methods via an interface (since abstract classes aren't popular as contract definitions).</p>