public delegate void EventHandler();
我添加了扩展方法“RaiseEvent”:
public static void RaiseEvent(this EventHandler self) {
if (self != null) self.Invoke();
}
当我使用典型的语法定义事件时,
public event EventHandler TypicalEvent;
那么我可以毫无问题地调用扩展方法:
TypicalEvent.RaiseEvent();
但是当我使用显式的add/remove语法定义事件时
private EventHandler _explicitEvent;
public event EventHandler ExplicitEvent {
add { _explicitEvent += value; }
remove { _explicitEvent -= value; }
}
如果事件是使用显式的add/remove语法定义的,则该扩展方法在该事件上不存在。
ExplicitEvent.RaiseEvent(); //RaiseEvent() does not exist on the event for some reason
当我将鼠标悬停在事件上以查看原因时,它会显示:
事件“ExplicitEvent”只能出现在 += 或 -= 的左侧
为什么使用典型语法定义的事件与使用显式添加/删除语法定义的事件不同,并且为什么扩展方法不能在后者上工作?
编辑:我发现可以通过直接使用私有事件处理程序来解决这个问题:
_explicitEvent.RaiseEvent();
但是我仍然不明白为什么我不能像使用典型语法定义的事件那样直接使用该事件。也许有人可以给我启示。