Установка статических событий на ноль с помощью отражения - PullRequest
0 голосов
/ 08 октября 2011

У меня следующая проблема:

У меня есть класс с ~ 100 статическими событиями, и я хочу установить все эти события на ноль (удаление всех делегатов) при утилизации.Могу ли я сделать это с помощью отражения?потому что в противном случае было бы много писать и трудно синхронизировать изменения.

Я пробовал что-то вроде этого:

foreach (EventInfo eventInfo in GetType().GetEvents(BindingFlags.Static | BindingFlags.Public))
     {
        // ?
     }

, но я не знаю, как установить их в ноль.Я думаю, это не работа с отражением, может быть, это еще один простой способ?

Br, David

Ответы [ 2 ]

3 голосов
/ 08 октября 2011

Должно работать следующее:

   foreach (EventInfo eventInfo in GetType().GetEvents(BindingFlags.Static | BindingFlags.Public))
   {
      FieldInfo field = GetType().GetField(eventInfo.Name, BindingFlags.Static | BindingFlags.NonPublic);
      field.SetValue(null, null);             
   }

При условии, что действительно действительно являются полями для поддержки событий, в противном случае нет никакого способа их "установить".

1 голос
/ 08 октября 2011

Вы не можете «устанавливать» события, единственными доступными операциями являются добавление или удаление определенного делегата.

Однако вы можете установить поле поддержки. Обратите внимание, что не обязательно соответствие 1: 1 между событиями и полями - WinForms использует словарь делегатов, чтобы не тратить место на события без обработчиков.

...