我关心的一件事是我发现了两种注册事件代表的方法。

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

第一个是干净的,并且做“ onstuff - = this.handle;”是有意义的。从活动中取消注册...但对于后一种情况,我应该执行“OnStuff -= new StuffEventHandler(this.Handle);”吗?感觉我根本没有删除任何东西,因为我添加了另一个 StuffEventHandler 引用。事件是否通过引用比较委托?我担心我可能会在这里启动一个令人讨厌的内存池。明白我吗?我没有对之前注册的“new StuffEventHandler”的引用。

做#1 的缺点是什么?

做#2 有什么好处?

有帮助吗?

解决方案

您无需担心保留对最初注册的委托的引用,并且不会启动“讨厌的内存池”。

当您调用“ onstuff - = new sutteventHandler(this.handle);”时。删除代码确实 不是 通过引用比较您要删除的委托:它通过比较对委托将调用的目标方法的引用来检查相等性,并从“OnStuff”中删除匹配的委托。

顺便说一句,“OnStuff”本身是一个委托对象(我假设您在声明中使用的事件关键字只是限制了委托的可访问性)。

其他提示

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

所以两者之间没有区别,只是一些语法糖让我们的代码更干净。

我的印象是 2 只是语法糖。他们应该是 确切地 一样的东西。

如果我没记错的话,第一个选择只是第二个选择的语法糖。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top