簡體   English   中英

將代理添加到關鍵字new的事件是否安全?

[英]Is it safe to add delegates to events with keyword new?

我關心的一件事是我發現了兩種向事件注冊委托的方法。

  1. OnStuff + = this.Handle;
  2. OnStuff + = new StuffEventHandler(this.Handle);

第一個是干凈的,做“OnStuff - = this.Handle”是有道理的。 從事件中取消注冊......但是對於后一種情況,我應該做“OnStuff - = new StuffEventHandler(this.Handle);”? 感覺就像我沒有刪除任何東西,因為我正在拋出另一個StuffEventHandler引用。 事件是否通過引用比較委托? 我擔心我可以在這里開始討厭的內存池。 抓住我? 我沒有引用我之前注冊的“new StuffEventHandler”。

做#1的缺點是什么?

做#2有什么好處?

第一個只是簡寫,它將生成與第二個相同的MSIL,在編譯類型它將查看this.Handle並推斷委托實例化。 但是你永遠不應該使用新的取消訂閱。

所以2,只是一些語法糖,使我們的代碼更清潔沒有區別。

您不必擔心保留對最初注冊的委托的引用,並且您不會啟動“討厭的內存池”。

當你調用“OnStuff - = new StuffEventHandler(this.Handle);”時 移除代碼並不比你通過引用刪除委托:它通過比較引用到目標的方法(s)表示,委托將調用檢查平等,從“OnStuff”刪除匹配的代表。

順便說一句,“OnStuff”本身是一個委托對象(我假設你在聲明中有的事件關鍵字只是限制了委托的可訪問性)。

我的印象是2只是語法糖。 它們應該完全一樣。

如果我沒記錯的話,第一種選擇只是第二種語法糖。

暫無
暫無

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

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