【问题标题】:What are lightweight events?什么是轻量级事件?
【发布时间】:2010-05-04 14:17:19
【问题描述】:

lightweight event这个词上跑了几次。文中没有附上任何代码 sn-ps 来弄清楚该术语背后的想法。
如果有人能解释什么是轻量级事件并举个例子,我将不胜感激。

【问题讨论】:

标签: c# events


【解决方案1】:

当您将事件处理程序添加到事件(或将方法组添加到委托,实际上)时,委托将持有对该方法组所在对象的引用,如果它是实例方法。

换句话说,触发事件的对象将在订阅事件时保留正在接收事件的对象。

因此,如果您使用完接收事件的那个对象,即使您用完它并释放所有引用(无需取消订阅),它仍然存在(并响应事件)。

这导致了对lightweight events 的渴望,这是不保留引用的事件。

默认在 .NET 框架中提供,所以如果你想实现它,你必须使用 add and remove accessors when declaring your event 和 @987654322 @ 存储通过隐式值参数传递的委托。

然后,当您触发事件时,您将检查您的 WeakReference 集合(您必须单独维护它才能执行此操作),特别是 IsAliveTarget 属性以确定是否已收集委托。如果不是,那么您将执行它,否则,您将通过它(并最有可能压缩您的列表)。

【讨论】:

  • +1。很好的答案 - 非常简洁明了。在消化了解释后,我意识到我在Richter 中读到过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 2018-12-27
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多