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