【发布时间】:2016-06-27 06:28:18
【问题描述】:
我有一个事件如下:
public event EventHandler<CustomEventArgs> RaiseCustomEvent;
下面是一些代码,用于从我正在处理的上述事件中删除委托:
public void RemoveDelegate(Delegate del)
{
RaiseCustomEvent -= (EventHandler<CustomEventArgs>)del;
}
这是我编写的一些代码,用于删除我知道事件名称的委托:
public void RemoveRaiseCustomEventDelegate(Delegate del, string eventName)
{
var field = this.GetType().GetField(eventName, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField);
var fieldValue = field.GetValue(this) as EventHandler<CustomEventArgs>;
fieldValue -= (EventHandler<CustomEventArgs>)del;
}
在上面的代码中,fieldValue 设置为 null,但是,当事件引发时,仍然有订阅者。
在我只有活动名称的情况下,我可以帮忙从活动中删除代表吗?
【问题讨论】:
-
fieldValue何时设置为空?何时分配或取消订阅del? -
当 del 被取消订阅时。
标签: c# events reflection delegates