【发布时间】:2011-06-18 12:32:06
【问题描述】:
来自MSDN:
任何与委托匹配的方法 签名,其中包括 返回类型和参数,可以是 分配给委托人。
这怎么可能:
public delegate void AlarmEventHandler(object sender, EventArgs e);
public event AlarmEventHandler Alarm;
protected virtual void OnAlarm(EventArgs e)
{
AlarmEventHandler handler = Alarm;
if (handler != null)
{
// Invokes the delegates.
handler(this, e);
}
}
委托AlarmEventHander 和事件AlarmEventHandler 具有不同的签名,但handler 可以分配给Alarm。
也许我在某种程度上误解了代表,如果有人能解释我哪里出错了,我将不胜感激。
【问题讨论】:
-
我认为您混淆了一些符号名称。在上面的代码中,委托被称为
AlarmEventHandler,同类型的事件被称为Alarm。由于它们属于同一类型,因此分配没有问题。我认为让您感到困惑的是OnAlarm方法,它可能会以不同的委托类型响应不同的事件。 -
我没有看到这里的问题。类型完全匹配(两者都是
AlarmEventHandler),因此人们希望能够将一种分配给另一种。