簡體   English   中英

如果事件不生成數據,為什么用通用參數替換EventArgs?

[英]Why to substitute EventArgs by generic parameter if the event does not generate data?

我很難理解來自MSDN EventHandler Delegate的以下短語:

  • “如果您的事件未生成事件數據,請用EventArgs代替通用類型參數; ...”

我是否正確理解由事件生成的數據存儲在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本身沒有保存數據的屬性。

從代碼中,通用類型參數受EventArgswhere TEventArgs : EventArgs )約束。 這意味着這是EventHandler delgate支持的最基本的類型。

調用事件處理程序時,是否可以僅發送null而不是EventArgs實例?

至於為什么,我不確定為什么它們要求所有事件都帶有參數,這在當時似乎是個好主意。

他們需要EventArgs原因之一是因為(在泛型之前) EventHandler委托需要EventArgs ,因此可能是為了保持兼容性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM