我关心的一件事是我发现了两种向事件注册委托的方法.
OnStuff + = this.Handle;
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"本身是一个委托对象(我假设你在声明中有的事件关键字只是限制了委托的可访问性).