使用反射将静态事件设置为空



我有以下问题:

我得到了一个类~100静态事件,我想设置所有这些事件为空(删除所有委托)时处置。我可以用反射来做这个吗?因为如果不这样的话,就会有很多东西要写,而且很难与变化保持同步。

我试过这样做:

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

,但我不知道如何设置它们为空。我猜这对反射不起作用,他们有没有另一种简单的方法?

Br,大卫。

下面应该可以工作:

   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:1的对应关系——WinForms使用委托字典来避免为没有处理程序的事件浪费空间。

相关内容

  • 没有找到相关文章

最新更新