c# - Lambda 表达式和事件订阅

标签 c# events lambda

我听说如果使用 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/

相关文章:

javascript - 追加后jquery 1.7点击事件不起作用

c++ - boost::lambda::if_then 用于 copy_if

c# - 使用 webclient c# 检查 URL 是否为下载链接

c# - try catch block 中的C#错误显示消息

Android事件处理方法

c++ - 为什么这个本地递归 C++ lambda 如此慢?

c# - 微软的 botframework 是免费的吗?

jquery - 使用 jQuery 将播放/暂停/结束功能绑定(bind)到 HTML5 视频

python - 使用 lambda 函数将 double for 循环转换为列表理解