2011-10-08 90 views
0

为null我有以下问题:设置静态事件使用反射

我有一类〜100个静态事件,我想在处置时将所有这些事件为空(删除所有代表)。 我可以使用反射吗?因为否则就会写很多东西,很难与变化保持同步。

我想是这样的:

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

但我不知道如何设置为null。我想这不是反思,他们可能是另一种简单的方法吗?

BR, 大卫

+1

我不明白。为什么要处置一个实例null所有静态事件? – svick

+0

这些事件是否自动实现? –

回答

3

下面应该工作:

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