首页 新闻 会员 周边

什么是委托?什么时候用委托?什么是事件?什么时候用到事件?

0
悬赏园豆:5 [已解决问题] 解决于 2012-07-15 00:18

asp.net中 这两个问题一直不太明吧

青雪落幕的主页 青雪落幕 | 初学一级 | 园豆:94
提问于:2012-06-27 12:36
< >
分享
最佳答案
0

......

收获园豆:5
八戒的师傅 | 小虾三级 |园豆:1472 | 2012-06-27 13:04
其他回答(4)
0

.NET Framework 中的事件模型基于具有事件委托,该委托将事件与事件处理程序连接。引发事件需要两个元素:

标识对事件提供响应的方法的委托。

保存事件数据的类。

委托是一个定义签名的类型,即方法的返回值类型和参数列表类型。可以使用委托类型来声明一个变量,该变量可以引用与委托签名相同的所有方法。

事件处理程序委托的标准签名定义一个没有返回值的方法,其第一个参数的类型为 Object,它引用引发事件的实例,第二个参数从 EventArgs 类型派生,它保存事件数据。如果事件不生成事件数据,则第二个参数只是 EventArgs 的一个实例。否则,第二个参数为从 EventArgs 派生的自定义类型,提供保存事件数据所需的全部字段或属性。

EventHandler 是一个预定义的委托,专用于表示不生成数据的事件的事件处理程序方法。如果事件生成数据,则必须提供自己的自定义事件数据类型,并且必须要么创建一个委托,其中第二个参数的类型为自定义类型,要么使用泛型 EventHandler<(Of <(TEventArgs>)>) 委托类并用自定义类型替代泛型类型参数。

若要将事件与处理事件的方法关联,请向事件添加委托的实例。除非移除了该委托,否则每当发生该事件时就调用事件处理程序。
下面的代码示例演示不使用事件数据的事件处理程序委托的声明。EventHandler 类是事件委托的类型,sender 是引发事件的对象,而 e 则是不包含任何数据的事件数据对象。示例的第二行代码为类中没有数据的事件定义事件成员。
.NET Framework 中的事件模型基于具有事件委托,该委托将事件与事件处理程序连接。引发事件需要两个元素:

引用向事件提供响应的方法的委托。

保存事件数据的类。

委托是一个定义签名的类型,即方法的返回值类型和参数列表类型。可以使用委托类型来声明一个变量,该变量可以引用与委托签名相同的所有方法。

事件处理程序委托的标准签名定义一个没有返回值的方法,其第一个参数的类型为 Object,它引用引发事件的实例,第二个参数从 EventArgs 类型派生,它保存事件数据。如果事件不生成事件数据,则第二个参数只是 EventArgs 的一个实例。否则,第二个参数为从 EventArgs 派生的自定义类型,提供保存事件数据所需的全部字段或属性。

EventHandler<(Of <(TEventArgs>)>) 是一种预定义委托,表示事件的事件处理程序方法,它与事件是否生成事件数据无关。如果事件不生成事件数据,则用 EventArgs 替代泛型类型参数;否则,提供自己的自定义事件数据类型并用该类型替代泛型类型参数。

使用 EventHandler<(Of <(TEventArgs>)>) 的优点在于,如果事件生成事件数据,则无需编写自己的自定义委托代码。此外,.NET Framework 只需一个实现就能支持 EventHandler<(Of <(TEventArgs>)>),这与替代泛型类型参数的事件数据类型无关。

若要将事件与处理事件的方法关联,请向事件添加委托的实例。除非移除了该委托,否则每当发生该事件时就调用事件处理程序。

 

===========From MSDN=====

Angkor--:-- | 园豆:1086 (小虾三级) | 2012-06-27 13:09

这个是个很抽象的概念,您在学习的过程中,慢慢地去理解他!

慢慢地,渐渐地......你就明白了许多............

 

伙计,加油!!

支持(0) 反对(0) Angkor--:-- | 园豆:1086 (小虾三级) | 2012-06-27 13:11

@Angkor: 

http://msdn.microsoft.com/zh-cn/library/17sde2xt

支持(0) 反对(0) Angkor--:-- | 园豆:1086 (小虾三级) | 2012-06-27 14:21
0
dudu | 园豆:30925 (高人七级) | 2012-06-27 13:30
0
Halower | 园豆:1723 (小虾三级) | 2012-06-27 17:31
0

不说理论,说实践的东西。

先说事件:一个BUTTON被点击了,一个窗口加载完了,一个工单处理完了,一篇博客提交了,看到了吧,这些都可以作为事件,如果你感觉这些时候有必要接着处理下一步工作,就可以定义个事件。

然后说委托:事件是个容器(至少你先这么理解),事件发生后要干什么事,就一件一件装进这个容器去。其实当然是把一个个方法装进去了,但也不能什么方法都装进去,所以得符合一定的要求,委托就是干这事的。

幽灵~ | 园豆:268 (菜鸟二级) | 2012-07-06 15:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册