EventArgs的一点变化

转自:http://www.it165.net/pro/html/201308/6751.html

这只是一个很小的状况,但为了怕年纪大忘记就写篇文记录一下。

        在 .Net 2.0 时代出现的 EventHandler<TEventArgs> 委派中本来 TEventArgs 是有泛型约束,要求该泛型型别必须是 EventArgs 的衍生类别,在 2.0 ~ 4.0 时代这个委派的宣告是长这样的 :

 

view source print ?
1. [SerializableAttribute]
2. public delegate void EventHandler<TEventArgs>(
3. Object sender,
4. TEventArgs e
5. )
6. where TEventArgs : EventArgs

        今天正好打开 Visual Studio 2012 要写个宣告此委派的错误范例,于是我写了以下的程序代码 www.it165.net

 

view source print ?
1. public event EventHandler<int> TestEvent;

        在我按下建置的那一刻满心期待出现『型别 'int' 不能做为泛型型别或方法 'System.EventHandler<TEventArgs>' 中的型别参数 』这个错误讯息,结果居然编译过了,当场傻眼。于是我就把 MSDN 文件库打开来重新查一遍,发现在 .Net 4.5 的 EventHandler<TEventArgs> 委派宣告变成了 :

 

view source print ?
1. [SerializableAttribute]
2. public delegate void EventHandler<TEventArgs>(
3. Object sender,
4. TEventArgs e
5. )

        在 4.5 版把泛型别约束拿掉了,所以再也不需要强制一定得继承 EventArgs 类别了,这只是个很小的状况,写个文留念一下。

你可能感兴趣的:(EventArgs)