有什么情况是必须用event,而不能用delegate的?

解决方案 »

  1.   

    你不想在声明delegate的类之外调用delegate,还有,除了声明delegate的类,其它类只能订阅(Subscribe,即+=)或取消订阅(Unsubscribe,即-=)时就给delegate加个event关键字。event和delegate谈不上什么区别不区别的。event就是delegate的一种应用。加上event关键字的delegate能做的事,所谓纯的delegate也完全能做到。event就是某个类发生一些事情时,通知对该事件感兴趣的客户的一种手段。
    不加event也可以达到效果。加了event的delegate变量就当是它给外面的世界只显示了两个东西:+=、-=。
    外面的世界既不能对他赋值(=操作),也不能调用它(myDelegate())。还有一点.net framework推荐使用了event关键字的delegate的原型最好类似delegate void MyEventHandler(object sender, MyEventHandler e);这个样子。声明了event delegate的类变得更加有个性,他可以对其他人说:我自己有什么事儿时候再告诉你们,我告诉你们之前你们别烦我,也不用告诉我该做什么。发生事情的时候我自己怎么处理是我自己的事,关你们屁事,事情发生了,我通知你们,你们怎么做是你们的事,做不做、怎么做也不管我的事。
      

  2.   

    在你感觉Event不能完成你需求的时候用Delegate..其他时候就是用Event咯..
      

  3.   

    感觉EventHandler(object sender, EventArgs e);还是满有意思的。
    谁通知的、通知的内容。
    谁通知的是确定的,而纯粹delegate时,谁都可以更改发送‘事件’的人。比如在声明delegate的类以外执行delegate时
      

  4.   

    这样来理解吧
    delegate是一个函数指针,event在这里做是只是一个编译器的一个“关键字”,加了这个关键字之后,你在外部调用时,就可以用+=或-=操作符啦,否则,只能用 = New EventHandler(MyProc);这样啦。不用event关键字也可以实现事件功能!
      

  5.   

    delegate就类似C语言中的函数指针,他里面包含了一个函数的原型(参数,返回值,调用方式)
    和该函数的内存地址。可以通过一个非null的delegate调用它所代理的函数。event是C#是关键字,实现“事件”。一般地,事件的实现需要借助于delegate,即
    发生某事件是,调用“订阅”/“注册”本事件时指定的delegate(所代理的函数)。delegate可以不在event中使用,而event一般需借助delegete来实现功能。
      

  6.   

    delegate可以不在event中使用,而event一般需借助delegete来实现功能
    有点说不清,用得多了就明白了