我有一个代表,说:
public delegate void MyDelegate();
我有一个事件,说:
public MyDelegate MyEvent;
在调用事件时,我收到一条错误消息:
“我的事件 += 预期......”
我该如何解决这个问题?
+= is associated with events, not just a declaration of a delegate. You are missing the 'event' keyword.
public **event** MyDelegate MyEvent;
Once you have that keyword the += will work for you.
您只能从声明它的类中调用该事件。在任何其他地方,您只能通过运算符添加或删除事件委托中的处理程序+=
和-=
,因此会出现错误消息。
如果您尝试使用来自不同类的事件,则需要了解事件和委托之间的区别。事件只是封装了“订阅”和“取消订阅”方面,而不是“引发事件”。(事实上,在 IL 中,您可以拥有一个“引发事件”的成员,但 C# 不支持它。)
有关更多详细信息,请参阅我关于事件和代表的文章。
查看 Chris Sells .NET Delegates: AC# Bedtime Story了解代表和活动的精彩指南。内容丰富且非常有趣。
此外,您可能想看看这篇关于避免检查空委托的帖子