转自:http://www.it165.net/pro/html/201308/6751.html
这只是一个很小的状况,但为了怕年纪大忘记就写篇文记录一下。
在 .Net 2.0 时代出现的 EventHandler<TEventArgs> 委派中本来 TEventArgs 是有泛型约束,要求该泛型型别必须是 EventArgs 的衍生类别,在 2.0 ~ 4.0 时代这个委派的宣告是长这样的 :
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
1.
public
event EventHandler<
int
> TestEvent;
在我按下建置的那一刻满心期待出现『型别 'int' 不能做为泛型型别或方法 'System.EventHandler<TEventArgs>' 中的型别参数 』这个错误讯息,结果居然编译过了,当场傻眼。于是我就把 MSDN 文件库打开来重新查一遍,发现在 .Net 4.5 的 EventHandler<TEventArgs> 委派宣告变成了 :
1.
[SerializableAttribute]
2.
public delegate void EventHandler<
TEventArgs
>(
3.
Object sender,
4.
TEventArgs e
5.
)
在 4.5 版把泛型别约束拿掉了,所以再也不需要强制一定得继承 EventArgs 类别了,这只是个很小的状况,写个文留念一下。