event会自动生成一个delegate变量和两个函数: add和remove,C#编译器用这两个方法支持+=和-=操作符,可以用ildasm看到。这种包装方法和property/field类似。

解决方案 »

  1.   

    事件是委托的一种特殊形式,它要求委托的返回值类型是void,即多路广播。
    我们自己定义的委托可以不表示事件,而只是代表方法的返回值类型和参数类型,在实例化该委托时传入方法名称,这样该委托的实例就可以表示相应的方法了。
      

  2.   

    我是楼主,这两天我看了一下。
    觉得最关键的一个是加上event关键字之后,那这个委托的实例在别的类中只能用+=或-=
    也就是别的类无权调用这个实例来实现委托链中的函数。
    是这样子吗?
      

  3.   

    还有一点是事件函数都是单向的,也就是返回void。如果不是同样的类型的委托就不能用event关键字。
      

  4.   

    qqchen79(知秋一叶 [MS MVP]) 的话我理解一部分,不过他肯定说到了关键之处,首先部分情况下委托与事件是都可以实现功能需求的,C#对于事件的定义是建立在委托的基础之上的,C#的编译器对于定义的事件
    “event会自动生成一个delegate变量和两个函数: add和remove,C#编译器用这两个方法支持+=和-=操作符,可以用ildasm看到。这种包装方法和property/field类似。---知秋一叶

    这样使用起来更方便一些,能够提供设计时支持,利用event规范,最重要的能够和Win32的消息能够兼容(我的感觉)