Реализация RAII в C #

У меня есть форма InfoPath, которая мне нужна, чтобы условно отключить ее события OnChange. Поскольку невозможно связать обработчики событий после загрузки формы, я вынужден полагаться на глобальный счетчик, который указывает, должно ли выполняться событие OnChange. Внутри каждого события OnChange я проверяю, есть ли SuppressEventsCount == 0, прежде чем выполнять какие-либо действия. Чтобы подавить события во время выполнения той или иной функции, я просто устанавливаю SuppressEventsCount ++ и - снова при выходе из функции. Самая большая проблема в том, что это не исключение. Поэтому у меня появилась блестящая идея обернуть счетчик SuppressEvents в класс, который реализует iDisposable.

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

Это работает, но все же не так идеально, как решение на С ++, которое вообще не требует использования директивы using.

Есть ли способ либо:

Запустить деструктор или некоторую функцию в тот момент, когда объект выходит из области видимости, ИЛИЗапретить инициализацию объекта SuppressEvents вне директивы using

Ответы на вопрос(4)

Ваш ответ на вопрос