Implementación de RAII en C #

Tengo un formulario de InfoPath que necesito para deshabilitar condicionalmente sus eventos OnChange. Como no es posible vincular los controladores de eventos una vez que se ha cargado el formulario, me veo obligado a confiar en un contador global que indica si se debe ejecutar un evento OnChange. Dentro de cada evento OnChange, verifico si SuppressEventsCount == 0 antes de realizar cualquier acción. Para suprimir eventos durante la ejecución de una función u otra, simplemente configuro SuppressEventsCount ++ y, de nuevo, cuando la función sale. El mayor problema al hacer esto es que no es una excepción segura. Así que tuve la brillante idea de envolver el contador SuppressEvents en una clase que implementa iDisposable

using(SuppressEvents s = new SuppressEvents()){
   // OnChange events fired here are ignored
} // OnChange events enabled again

Esto funciona, pero aún no es tan ideal como una solución de C ++ que no requiere el uso de la directiva "uso".

¿Hay alguna forma de:

Active un destructor o alguna función en el momento en que un objeto salga del alcance, OPrevenga que el objeto SuppressEvents se inicialice fuera de una directiva "using" completamente

Respuestas a la pregunta(8)

Su respuesta a la pregunta