这两种移除事件处理程序的方式有什么区别吗?

8
这里有什么区别吗?
Button1.Click -= new EventHandler(Button1_Click);

并且

Button1.Click -= Button1_Click;

第二种方法对我似乎不起作用,但是我在谷歌搜索“如何删除事件处理程序”时看到了它的使用。编辑:实际上,两种方法都对我不起作用,即使是这样,应该可以交替使用吗? 更新: 之所以这些方法对我似乎没有效果,是因为我在我的控件上设置了AutoPostBack=true。我没有设置断点来查看事件是否被调用,只是观察浏览器是否刷新(表示进行了后续请求)。

@MarkByers,实际上,我已经更新了我的问题以展示这一点。你非常敏锐! - Dean
似乎Button1_Click的签名可能是错误的。代码添加它们是否有效? - Enigmativity
@Enigmativity 我在aspx页面的前端中添加了事件处理程序,所以那里没有问题。我已经更新了我的问题,解释了我犯的错误,认为这段代码不起作用,而实际上是其他原因。 - Dean
2个回答

8

这两段代码是相同的。第二个语法(称为“方法组转换”)是在C# 2.0中新增加的功能。


4
我认为第一个有点误导。它让我感觉好像我并没有移除现有的东西。可能许多初学者都会觉得这很烦人。 - dowhilefor
@dowhilefor 我不认为自己还是初学者,但仍然非常不喜欢第一种语法。从列表中删除对象的引用,因为我试图删除一个具有相同值的不同对象,仍然看起来像是一种hack。 - Yaur
@Yaur 抱歉,我并不是在暗示你是初学者,只是猜测这可能会让其他正在学习该语言的人感到烦恼。但我同意,我认为这对任何人都不是显而易见的。说实话,几个月前我也不确定那里到底发生了什么,所以我不得不查一下。 - dowhilefor

0
从功能上来说,两者之间没有区别。至于你提到的两者都无法工作的问题,如果这是一个ASP.NET应用程序,你可能需要在aspx页面中禁用自动事件绑定。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接