学习C#不久,以前一直学VC的,可以说是为了找工作时多点筹码而学的,有些功利性,不过喜欢追根问底.问个关于事件的问题基本语言要素我了解,只是觉得有些疑惑.希望各位达人帮忙提示下委托对象定义了一个回调函数的形式,而事件又是依据一个委托创建的,那么"事件"存在的意义是什么?一种委托对象只能对应一种形式的函数,一种事件对象只能对应一种形式的委托,那么直接把事件与函数关联起来不好么?为什么需要在中间加上一层?以Windows应用程序为例,众所周知,Windows底层是基于消息驱动的,当处理消息时,省去事件一层,直接调用委托中的函数列表不是更直接?省去委托一层也是一样.那么,是不是事件还有些别的什么我目前还不知道的特性?Event和delegate对象全都实现了多点回调,实现了+=和-=操作符,事件对象也可以像多点委托时关联多个函数那样关联到多个委托,那么去掉它们中的任意一层不是更好?多了一个层次并没有增加可扩展性和可读性,那么这样做的意义何在?如果事件对象可以关联到多个不同类型的委托,那就容易理解了,可是事实上事件只能依据一个已有委托来创建,而添加委托时又必须符合创建事件时的委托形式,那么,事件到底有什么特别的作用呢?期待一直在做C#的兄弟们帮忙解释下,谢谢了先!

解决方案 »

  1.   

    我觉得event更像 
    一个关键字一个标准一个被识别的标准
      

  2.   

    Events are a special kind of multicast delegate that can only be invoked from within the class or struct where they are declared (the publisher class).
    注意within
      

  3.   

    我也问过一个同样的问题.有人回答event可以在interface中使用
      

  4.   

    委托是一种引用方法的类型,跟接口一样允许设计器把方法的定义跟实现分离。事件是使用委托来为触发时将调用的方法提供类型安全的封装,可以说事件是委托的一种特例。
    委托和事件特点如下:
    委托具有以下特点:
    委托类似于 C++ 函数指针,但它是类型安全的。
    委托允许将方法作为参数进行传递。
    委托可用于定义回调方法。
    委托可以链接在一起。
    方法不需要与委托签名精确匹配。事件具有以下特点:
    事件是类用来通知对象需要执行某种操作的方式。
    尽管事件在其他时候(如信号状态更改)也很有用,事件通常还是用在图形用户界面中。
    事件通常使用委托事件处理程序进行声明。
    事件可以调用匿名方法来替代委托。其实,你可以在msdn中找到答案,微软已经给予了深刻的解释
      

  5.   

    事件就是委托的实例,委托的级别是类型,与class A中的A是一个级别的.
      

  6.   

    正确地说,委托跟事件是风马牛不相及的两个东西,JAVA中没有委托,通过监听器一样很好地实现了事件模型,C#只是通过委托更优雅地实现了将一个方法绑定到事件上
      

  7.   

    我的感受:
    delegate象一个类,而且是可以提供回调功能的类
    event则是对delegate的扩充,最起码delegate不支持多播,或者得手工去写,而event自动在delegate的基础上添加了多播的能力。