[英]Why to substitute EventArgs by generic parameter if the event does not generate data?
我很難理解來自MSDN EventHandler Delegate的以下短語:
我是否正確理解由事件生成的數據存儲在EventArgs
的實例中?
附帶好奇心:
這句話是否意味着如果事件生成數據,那么不要使用通用類型EventArgs? 為什么?
主要問題是:
如果事件不生成數據,為什么還要打擾EventArgs
(使它成為通用的,還是使其不通用)?
更新:
從上面提到的文章及其附帶的代碼示例中,我了解到,而不是委托:
public delegate void EventHandler(Object sender, EventArgs e)
我要用
public delegate void EventHandler<EventArgs>(Object sender, EventArgs e)
當我的活動不生成數據時。
如果僅使用EventArgs
,則第二個相對於第一個沒有優勢。 文檔可能只是沒有提到第二種可能性,因為在所有示例中只顯示帶有通用參數的單個委托定義會更容易。
另外,通常傳遞EventArgs.Empty
而不是null
。
如果事件確實有數據,則需要將EventArgs
子類化,然后使用該子類(在示例中,它們使用MyEventArgs
)。 EventArgs
本身沒有保存數據的屬性。
從代碼中,通用類型參數受EventArgs
( where TEventArgs : EventArgs
)約束。 這意味着這是EventHandler
delgate支持的最基本的類型。
調用事件處理程序時,是否可以僅發送null
而不是EventArgs
實例?
至於為什么,我不確定為什么它們要求所有事件都帶有參數,這在當時似乎是個好主意。
他們需要EventArgs
原因之一是因為(在泛型之前) EventHandler委托需要EventArgs
,因此可能是為了保持兼容性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.