这两个事件声明有什么区别?

时间:2017-02-09 13:54:30

标签: c# events delegates

我在课堂上有两个事件

public event AcquiredDataEvent OnNewAcquiredData;
public delegate void AcquiredDataEvent(int[] newData);

public ScanStartedEvent ScanStarted;
public delegate void ScanStartedEvent();

我刚才意识到ScanStarted之前没有关键字event。很可能是我打字错误的结果,尽管它仍然按预期工作。

这两个事件有什么区别?

1 个答案:

答案 0 :(得分:1)

  1. ScanStarted不是事件。它只是一个委托类型的领域。
  2. 可以在字段被解析的类之外调用它。
  3. 它不提供添加/删除方法(即事件是什么,如属性是一对get / set方法)来附加/删除事件处理程序 - 您可以简单地将新委托分配给ScanStarted字段。
  4. BTW就像你可以拥有没有支持领域的财产一样

    public int Value
    {
       get { return 42; }
       set { Console.WriteLine($"Haha, keep {value} for yourself"); }
    }
    

    您可以在没有委托字段的情况下举办活动

    public event AcquiredDataEvent OnNewAcquiredData
    {
       add { Console.WriteLine("Trying to attach some handlers?"); }
       remove { Console.WriteLine("Haha, you should attach something first!"); }
    }