当前位置:  开发笔记 > 编程语言 > 正文

在.Net中设置/删除事件处理程序

如何解决《在.Net中设置/删除事件处理程序》经验,为你挑选了1个好方法。

所以我坚持修复/维护另一个程序员代码(blech)

我是一个坚定的教授"如果它没有破坏不修复它!" 因此,每次遇到可怕的代码时,我都希望改变一些东西,我只限于改变可能的绝对最小代码量以进行必要的修复.但在某些情况下,我真的需要先了解一些事情,然后再尝试遵循它/改变它.

我在这里看到了这一点:

region.LineSelected = (x) => { };

我想知道它是否与此相同:

region.LineSelected = null;

在我改变它的方法之前,我希望100%肯定第一条线在做什么.



1> Richard Szal..:

根据我目前对该主题的意见进行编辑

他们不一样.lambda版本正在为一个空的匿名方法添加一个事件处理程序.这允许其他代码自由地引发LineSelected()而不用担心它是否为null(即没有监听器).

例如.

var lineSelected = this.LineSelected;

if (lineSelected != null)
{
    lineSelected(EventArgs.Empty);
}

如果在if之后但在引发事件之前在另一个线程中从LineSelected取消订阅,则上述语句可以抛出NullReferenceException.将LineSelected分配给临时变量,然后提升它可以调用未订阅的事件侦听器.将事件处理程序分配给局部变量是处理空委托的推荐方法.

通过添加一个空委托,其他代码总是能够调用LineSelected而不必担心NullReferenceException.通过将多播事件委托分配给局部变量,可以确保该值不能被另一个线程修改.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有