EventHandler<TEventArgs> 委派在 .Net 4.5 的改變

EventHandler<TEventArgs> 委派在 .Net 4.5 的改變

        這只是一個很小的狀況,但為了怕年紀大忘記就寫篇文記錄一下。

 

 

        在 .Net 2.0 時代出現的 EventHandler<TEventArgs> 委派中本來 TEventArgs 是有泛型約束,要求該泛型型別必須是 EventArgs 的衍生類別,在 2.0 ~ 4.0 時代這個委派的宣告是長這樣的 :

 

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

        今天正好打開 Visual Studio 2012 要寫個宣告此委派的錯誤範例,於是我寫了以下的程式碼


public event EventHandler<int> TestEvent;

 

        在我按下建置的那一刻滿心期待出現『型別 'int' 不能做為泛型型別或方法 'System.EventHandler<TEventArgs>' 中的型別參數 』這個錯誤訊息,結果居然編譯過了,當場傻眼。於是我就把 MSDN 文件庫打開來重新查一遍,發現在 .Net 4.5 的 EventHandler<TEventArgs> 委派宣告變成了 :

 

[SerializableAttribute]
public delegate void EventHandler<TEventArgs>(
	Object sender,
	TEventArgs e
)

 

        在 4.5 版把泛型別約束拿掉了,所以再也不需要強制一定得繼承 EventArgs 類別了,這只是個很小的狀況,寫個文留念一下。