Реализация 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