轉自: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 類別了,這只是個很小的狀況,寫個文留念一下。