[英]Is it safe to add delegates to events with keyword new?
我關心的一件事是我發現了兩種向事件注冊委托的方法。
第一個是干凈的,做“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.