【发布时间】:2008-11-16 18:02:05
【问题描述】:
我有一个代表,说:
public delegate void MyDelegate();
我有一个活动,比如说:
public MyDelegate MyEvent;
在调用事件时,我收到一条错误消息:
“MyEvent += 预期.....”
我该如何解决这个问题?
【问题讨论】:
-
您用来调用此事件的代码是什么?
我有一个代表,说:
public delegate void MyDelegate();
我有一个活动,比如说:
public MyDelegate MyEvent;
在调用事件时,我收到一条错误消息:
“MyEvent += 预期.....”
我该如何解决这个问题?
【问题讨论】:
您只能从您声明它的类中调用该事件。在任何其他地方,您只能通过运算符 += 和 -= 在事件委托中添加或删除处理程序,因此会出现错误消息。
【讨论】:
+= 与事件相关联,而不仅仅是委托的声明。您缺少“事件”关键字。
public **event** MyDelegate MyEvent;
一旦你有了那个关键字,+= 就会为你工作。
【讨论】:
如果您尝试使用来自不同类的事件,则需要了解事件和委托之间的区别。事件只是封装了“订阅”和“取消订阅”方面,而不是“引发事件”。 (事实上,在 IL 中,您可以拥有一个“引发事件”的成员,但 C# 不支持它。)
【讨论】:
另外你可能想看看这篇关于avoiding checking for null delegates的帖子
【讨论】:
查看 Chris Sells .NET Delegates: A C# Bedtime Story,了解代表和活动的精彩指南。内容丰富且非常有趣。
【讨论】: