title: Implementing RAII in C#
body: <p>I have an InfoPath form which I need to conditionally disable it's OnChange events. Since it's not possible to bind the event handlers after the form has loaded, I'm forced to rely on a global counter which indicates whether an OnChange event should be executed.
  Inside each OnChange event, I check whether SuppressEventsCount == 0 before performing any actions.
  To suppress events during the execution of some function or another, I simply set SuppressEventsCount++, and -- again when the function exits. The biggest problem with doing this is that it's not exception safe. So I had the bright idea to wrap the SuppressEvents counter in a class which implements iDisposable</p>
  
  <pre><code>using(SuppressEvents s = new SuppressEvents()){
     // OnChange events fired here are ignored
  } // OnChange events enabled again
  </code></pre>
  
  <p>This is working, but it's still not as ideal as a c++ solution which doesn't require the use of the "using" directive at all. </p>
  
  <p>Is there some way to either:</p>
  
  <ol>
  <li>Trigger a destructor or some function the moment an object goes out of scope, OR</li>
  <li>Prevent the SuppressEvents object from being initialised outside of a "using" directive entirely</li>
  </ol>