我听说如果使用 lambda 表达式订阅一个事件,那么这将创建一个对事件处理程序代码的弱引用,因此当订阅者死亡/不再订阅时,不需要显式取消订阅该事件感兴趣的。这是真的? 例如。
aPersion.PropertyChanged += (s, e) =>
{
if (e.PropertyName == "Name")
{
this.Name = this.TheController.Name;
}
};
最佳答案
不,这是神话。 Lambda 创建常规委托(delegate)(至少在这种用法中)。混淆通常很简单,如果发布对象将在之前或大约在与订阅者相同的时间完成,则无需退订。事件委托(delegate)仅使订阅者保持事件状态,而不是发布者。
因此,在给出的示例中,这取决于您的发布者:aPersion
(可能是个人或类似人员)是否将在 表单/页面之后使用/什么都结束了。
关于c# - Lambda 表达式和事件订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1747895/