【发布时间】:2010-11-04 03:35:54
【问题描述】:
我已经声明了一个通用事件处理程序
public delegate void EventHandler();
我添加了扩展方法“RaiseEvent”:
public static void RaiseEvent(this EventHandler self) {
if (self != null) self.Invoke();
}
当我使用典型语法定义事件时
public event EventHandler TypicalEvent;
然后我可以毫无问题地调用使用扩展方法:
TypicalEvent.RaiseEvent();
但是当我使用显式添加/删除语法定义事件时
private EventHandler _explicitEvent;
public event EventHandler ExplicitEvent {
add { _explicitEvent += value; }
remove { _explicitEvent -= value; }
}
那么扩展方法在使用显式添加/删除语法定义的事件上不存在:
ExplicitEvent.RaiseEvent(); //RaiseEvent() does not exist on the event for some reason
当我将鼠标悬停在事件上以查看它说的原因时:
事件“ExplicitEvent”只能 出现在 += 的左侧或 -=
为什么使用典型语法定义的事件与使用显式添加/删除语法定义的事件不同?为什么扩展方法不适用于后者?
编辑:我发现我可以通过直接使用私有事件处理程序来解决它:
_explicitEvent.RaiseEvent();
但我还是不明白为什么我不能像使用典型语法定义的事件那样直接使用事件。也许有人可以启发我。
【问题讨论】:
-
你也不能在类外使用扩展方法。