在lightweight event
这个词中跑了几次。文本没有附带任何代码片段来弄清楚这个术语背后的想法
如果有人能解释什么是轻量级事件并抛出示例,我将非常感激。
答案 0 :(得分:4)
当您将事件处理程序添加到事件(或实际上是委托的方法组)时,委托将保存对方法组所在对象的引用(如果它是实例方法)。
换句话说,触发事件的对象将保留在订阅事件时接收事件的对象。
因此,如果你完成了使用那个正在接收事件的对象,它仍然存在(并响应事件),即使你已完成它并释放所有引用(没有取消订阅)。
这导致了对lightweight events
的渴望,{{1}}是不能保留参考的事件。
默认情况下,.NET框架中提供 ,因此如果您想实现此功能,则必须使用add and remove accessors when declaring your event和WeakReference用于存储通过隐式值参数传递的委托。
然后,当你触发事件时,你会检查你的WeakReference集合(你必须单独维护它),特别是IsAlive和Target属性来确定代表是否已经集。如果没有,那么你会执行它,否则,你会通过它(并压缩你的列表,很可能)。