纯delegate和event有什么本质区别?还有应用方面上? 有什么情况是必须用event,而不能用delegate的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你不想在声明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的类变得更加有个性,他可以对其他人说:我自己有什么事儿时候再告诉你们,我告诉你们之前你们别烦我,也不用告诉我该做什么。发生事情的时候我自己怎么处理是我自己的事,关你们屁事,事情发生了,我通知你们,你们怎么做是你们的事,做不做、怎么做也不管我的事。 在你感觉Event不能完成你需求的时候用Delegate..其他时候就是用Event咯.. 感觉EventHandler(object sender, EventArgs e);还是满有意思的。谁通知的、通知的内容。谁通知的是确定的,而纯粹delegate时,谁都可以更改发送‘事件’的人。比如在声明delegate的类以外执行delegate时 这样来理解吧delegate是一个函数指针,event在这里做是只是一个编译器的一个“关键字”,加了这个关键字之后,你在外部调用时,就可以用+=或-=操作符啦,否则,只能用 = New EventHandler(MyProc);这样啦。不用event关键字也可以实现事件功能! delegate就类似C语言中的函数指针,他里面包含了一个函数的原型(参数,返回值,调用方式)和该函数的内存地址。可以通过一个非null的delegate调用它所代理的函数。event是C#是关键字,实现“事件”。一般地,事件的实现需要借助于delegate,即发生某事件是,调用“订阅”/“注册”本事件时指定的delegate(所代理的函数)。delegate可以不在event中使用,而event一般需借助delegete来实现功能。 delegate可以不在event中使用,而event一般需借助delegete来实现功能有点说不清,用得多了就明白了 在下拉列表中显示数据集的问题 100分跪求解决! 急! 请问, remoting调用中, 遇到Unable to find assembly 报错, 有高手遇到过吗? 关于删除临时文件 TabControl 的TabPage 间隔问题,急!!! .NET 2003和.NET 2005差别大吗? 如何用C#.net获取存储过程中返回的值 寻求按钮控件。在线等!!!马上结贴。 年前的帖子都结了吧.别压到07年的年底了 求动态程序页面的程序代码 有没有讲 .net 程序效率的书??? 如何在程序里改变label的位置啊? 什么叫模态窗体呢?
不加event也可以达到效果。加了event的delegate变量就当是它给外面的世界只显示了两个东西:+=、-=。
外面的世界既不能对他赋值(=操作),也不能调用它(myDelegate())。还有一点.net framework推荐使用了event关键字的delegate的原型最好类似delegate void MyEventHandler(object sender, MyEventHandler e);这个样子。声明了event delegate的类变得更加有个性,他可以对其他人说:我自己有什么事儿时候再告诉你们,我告诉你们之前你们别烦我,也不用告诉我该做什么。发生事情的时候我自己怎么处理是我自己的事,关你们屁事,事情发生了,我通知你们,你们怎么做是你们的事,做不做、怎么做也不管我的事。
谁通知的、通知的内容。
谁通知的是确定的,而纯粹delegate时,谁都可以更改发送‘事件’的人。比如在声明delegate的类以外执行delegate时
delegate是一个函数指针,event在这里做是只是一个编译器的一个“关键字”,加了这个关键字之后,你在外部调用时,就可以用+=或-=操作符啦,否则,只能用 = New EventHandler(MyProc);这样啦。不用event关键字也可以实现事件功能!
和该函数的内存地址。可以通过一个非null的delegate调用它所代理的函数。event是C#是关键字,实现“事件”。一般地,事件的实现需要借助于delegate,即
发生某事件是,调用“订阅”/“注册”本事件时指定的delegate(所代理的函数)。delegate可以不在event中使用,而event一般需借助delegete来实现功能。
有点说不清,用得多了就明白了