码迷,mamicode.com
首页 > Web开发 > 详细

EventHandler 与常见的.Net预定义委托

时间:2015-07-31 10:13:15      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

看着下面这两句事件定义及激发忽然有点不明白了,

public event EventHandler<ExternalDataEventArgs> Submit;

Submit(null, args);

 

貌似该事件定义时只传一个参数args, 但实际激发时要传两个参数, 咋回事捏!

 

其实, 这是误解,  这个EventHandler<ExternalDataEventArgs>是个泛型版的预定义委托, 该委托实际的定义如下:

public delegate void EventHandler<TEventArgs> (
Object sender,
TEventArgs e
) where TEventArgs : EventArgs

而非泛型版的定义如下:

public delegate void EventHandler (

  Object sender,

  EventArgs e

)


这样就明白了, 事件确实是需要两个参数.

 

推荐资料: .NET Framework委托的预定义方法介绍

http://webservices.ctocio.com.cn/net/430/9352430.shtml

 

此文中这段甚对, "从.NET Framework2.0开始以来,系统预定义的委托使使代码看起来有点像“天书”,再加上匿名表达式,以及后面Lambda表达式的“掺和”,代码就更加难懂了."

因此,多梳理,多熟悉一下才行。

类似的预定义委托还有:

1.Action 封装1-16个参数, 无返回值.

public delegate void Action<in T>(
 T obj
)

public delegate void Action<in T1, in T2>(
 T1 arg1,
 T2 arg2
)

2.Func 封装1-16个参数, 返回值TResult.

public delegate TResult Func<out TResult>(

)

public delegate TResult Func<in T, out TResult>(
 T arg
)

3.Predicate 表示定义一组条件并确定指定对象是否符合这些条件的方法。

public delegate bool Predicate<in T>(
 T obj
)

 

推荐资料:

EventHandler 泛型委托
http://msdn.microsoft.com/zh-cn/library/db0etb8x(v=VS.80).aspx

Action<T> 委托
http://msdn.microsoft.com/zh-cn/library/018hxwa8.aspx

 

Func<TResult> 委托
http://msdn.microsoft.com/zh-cn/library/bb534960.aspx

 

Predicate<T> 委托
http://msdn.microsoft.com/zh-cn/library/bfcke1bz(v=VS.100).aspx

 

 

 

 

作者:BobLiu 
邮箱:lzd_ren@hotmail.com
出处:http://www.cnblogs.com/liuzhendong
本文版权归作者所有,欢迎转载,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

EventHandler 与常见的.Net预定义委托

标签:

原文地址:http://www.cnblogs.com/xyzhuzhou/p/4691320.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!