我听说如果lambda表达式用于订阅事件,那么这将创建对事件处理程序代码的弱引用,因此当订阅者死亡/不再需要时,不需要显式取消订阅该事件感兴趣。这是真的? 例如。
aPersion.PropertyChanged += (s, e) =>
{
if (e.PropertyName == "Name")
{
this.Name = this.TheController.Name;
}
};
答案 0 :(得分:2)
不,在事件订阅的上下文中,lambda表达式只是所有意图和目的的委托,因此仍然容易出现Lapsed Listener问题。所以不,这绝对不是一个弱的参考。
答案 1 :(得分:2)
不,这是神话。 Lambdas创建常规委托(至少在此用法中)。如果发布对象将在之前或相同时间与订阅者一起完成,那么这种混淆通常很简单,则无需取消订阅。事件委托仅保留订阅者 aliver,而不是发布者。
因此,在给出的示例中,这取决于您的发布商:aPersion
(可能是一个人或类似人)将在表单/页面/已完成的任何内容之后使用