我在应用程序中发现了一些代码,我应该更新它为控件的每个可能事件定义一个事件处理程序(或者至少是设计器中列出的所有事件,来自我能说的是什么。我以前从未见过这个,也不想在我的任何应用程序中实现它。
一个例子;启动日志记录操作的按钮开始Click
上的操作。但是,所有其他事件处理程序也被绑定,从AutoSizeChanged
和BackColorChanged
一直到VisibleChanged
和Validating
。除Click
外,所有事件处理程序都为空。从目前为止我所知道的,整个应用程序中的许多控件都会发生这种情况。
没有提供任何评论,详细说明为什么会这样。为什么要这样做?
答案 0 :(得分:4)
除了Click之外,所有事件处理程序都是空的。据我所知,到目前为止,整个应用程序中都会出现许多控件。
为什么要这样做?
很可能是因为原作者不明白没有必要。
没有很好的技术理由这样做。它实际上只是降低了性能,并没有带来任何好处。
请注意,许多人在他们自己的类上创建事件时,通常会订阅一个空的事件处理程序。这使得它们可以避免对订阅列表进行空检查。我怀疑这是作为一种误导性的尝试来防止这种情况,即使它通常在事件发布方面完成,而不是在等式的订阅方。
答案 1 :(得分:2)
那是......不是理想的情况。实际上,大多数winforms控件都使用EventHandlerList
,它被设计为稀疏事件的高效存储模型。如果要覆盖正在进行子类化的事件(表单等)的事件,那么override
是事件订阅的首选选项。
听起来有人通过双击IDE中的事件使它们全部变为粗体。它没有任何用处。
答案 2 :(得分:1)
您通常可以删除空事件处理程序。这可能是一个“思考未来”的开发人员,并且希望“如果我们需要的话”准备好一些代码。
我注意到:
因此,我会坚持YAGNI原则并立即删除它们。
答案 3 :(得分:1)
对于旧版本的Visual Studio,一旦插入新的事件处理程序,当您删除事件处理程序方法时,它不会自动从designer.cs文件中删除代码。您必须进入Windows窗体设计器生成的代码并查找/删除行,如:
this.button1.Click += new System.EventHandler(this.button1_Click);
否则,如果删除了button1_Click方法,则会出现构建错误。这是一种痛苦,这可能就是他从未清理过它们的原因。现在,当您删除事件处理程序方法时,删除连线就足够聪明了。