我有以下问题:
我得到了一个类~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使用委托字典来避免为没有处理程序的事件浪费空间。