【问题标题】:How do I fix this error: "MyEvent += expected"?如何修复此错误:“MyEvent += 预期”?
【发布时间】:2008-11-16 18:02:05
【问题描述】:

我有一个代表,说:

public delegate void MyDelegate();

我有一个活动,比如说:

public MyDelegate MyEvent;

在调用事件时,我收到一条错误消息:

“MyEvent += 预期.....”

我该如何解决这个问题?

【问题讨论】:

  • 您用来调用此事件的代码是什么?

标签: .net delegates


【解决方案1】:

您只能从您声明它的类中调用该事件。在任何其他地方,您只能通过运算符 +=-= 在事件委托中添加或删除处理程序,因此会出现错误消息。

【讨论】:

    【解决方案2】:

    += 与事件相关联,而不仅仅是委托的声明。您缺少“事件”关键字。

    public **event** MyDelegate MyEvent;
    

    一旦你有了那个关键字,+= 就会为你工作。

    【讨论】:

      【解决方案3】:

      如果您尝试使用来自不同类的事件,则需要了解事件和委托之间的区别。事件只是封装了“订阅”和“取消订阅”方面,而不是“引发事件”。 (事实上​​,在 IL 中,您可以拥有一个“引发事件”的成员,但 C# 不支持它。)

      更多详情请见my article on events and delegates

      【讨论】:

      • 我一直怀疑 C# 不支持 Raise 方法,因为 VB 甚至 C++/CLI 都支持,有时它实际上非常方便。你知道这个决定的任何原因吗?
      • 在我看来,它破坏了封装。一个类应该负责自己引发事件——事件模式是一种观察模式。我从来没有遇到过我想从“外部”提出事件但有很好理由这样做的情况(而不是其他地方的粗鲁设计)。
      【解决方案4】:

      另外你可能想看看这篇关于avoiding checking for null delegates的帖子

      【讨论】:

        【解决方案5】:

        查看 Chris Sells .NET Delegates: A C# Bedtime Story,了解代表和活动的精彩指南。内容丰富且非常有趣。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-04
          • 2020-02-22
          • 2014-03-01
          相关资源
          最近更新 更多