当前位置:  开发笔记 > 编程语言 > 正文

将代理添加到关键字new的事件是否安全?

如何解决《将代理添加到关键字new的事件是否安全?》经验,为你挑选了2个好方法。

我关心的一件事是我发现了两种向事件注册委托的方法.

    OnStuff + = this.Handle;

    OnStuff + = new StuffEventHandler(this.Handle);

第一个是干净的,做"OnStuff - = this.Handle"是有道理的.从事件中取消注册......但是对于后一种情况,我应该做"OnStuff - = new StuffEventHandler(this.Handle);"?感觉就像我没有删除任何东西,因为我正在抛出另一个StuffEventHandler引用.事件是否通过引用比较委托?我担心我可以在这里开始讨厌的内存池.抓住我?我没有引用我之前注册的"new StuffEventHandler".

做#1的缺点是什么?

做#2有什么好处?



1> sontek..:

第一个只是简写,它将生成与第二个相同的MSIL,在编译类型它将查看this.Handle并推断委托实例化.但是你永远不应该使用新的取消订阅.

所以2,只是一些语法糖,使我们的代码更清洁没有区别.



2> Lee..:

您不必担心保留对最初注册的委托的引用,并且您不会启动"讨厌的内存池".

当你调用"OnStuff - = new StuffEventHandler(this.Handle);"时 删除代码没有比你通过引用删除委托:它通过比较引用到目标的方法(s)表示,委托将调用检查平等,从"OnStuff"删除匹配的代表.

顺便说一句,"OnStuff"本身是一个委托对象(我假设你在声明中有的事件关键字只是限制了委托的可访问性).

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有