【发布时间】:2012-05-15 03:02:35
【问题描述】:
我在 this SO answer 之后对我的 C# 4.0 事件处理程序逻辑进行建模并得到错误
ThresholdExceededEvent 只能出现在 += 或 -= 的左侧
代码
private EventHandler<EventLogAlert> thresholdExceededEventDelegate;
public event EventHandler<EventLogAlert> ThresholdExceededEvent
{
add { thresholdExceededEventDelegate += value; Console.WriteLine("add operation"); }
remove { thresholdExceededEventDelegate -= value; Console.WriteLine("remove operation"); }
}
protected virtual void OnThresholdExceededEvent(EventLogAlert e)
{
EventHandler<EventLogAlert> handler = ThresholdExceededEvent;
if (handler != null)
{
handler(this, e);
}
}
但是当我这样做时它会编译......
public event EventHandler<EventLogAlert> ThresholdExceededEvent;
protected virtual void OnThresholdExceededEvent(EventLogAlert e)
{
EventHandler<EventLogAlert> handler = ThresholdExceededEvent;
if (handler != null)
{
handler(this, e);
}
}
首选的方法是什么?
【问题讨论】:
-
您可以直接访问委托而不是事件,例如"handler = thresholdExceededEventDelegate;"
-
可以做到,但我想这样做是为了让它更多thread safe
标签: c# c#-4.0 properties delegates event-handling