处理OnClick事件处理程序的正确方法,它们基本上做同样的事情

本文关键字:基本上 事件处理 OnClick 程序 方法 处理 | 更新日期: 2023-09-27 18:18:07

假设我有一个按钮做一些事情,它的OnClick事件处理程序是foo。然后我有另一个按钮,事件处理程序栏,设置一些额外的值,然后做同样的事情foo。Foo实际上不使用它的任何参数。正确的处理方法是什么?

选项1:

protected void foo(object sender, EventArgs e) {
//does stuff
}
protected void bar(object sender, EventArgs e) 
{
//does stuff
foo(null, null);
}

用那些空值调用foo对我来说似乎很糟糕。是吗?

选项2:

protected void foo(object sender, EventArgs e) 
{
func();
}
protected void bar(object sender, EventArgs e) 
{
//does stuff
func();
}

让foo只是对另一个函数的调用似乎没有必要冗长。这在语义上更清晰。

不给foo参数似乎不是一个选项,这会导致编译错误。

我错过了更好的选择吗?

处理OnClick事件处理程序的正确方法,它们基本上做同样的事情

我认为你必须在你列出的两个选项中选择一个。

我不认为有时有点啰嗦是不好的,选项二给你一些小好处。

  • 你永远不需要做条件检查来查看foo中的参数是否为空。
  • 如果稍后添加更多逻辑,代码已经很好地分离,使其更容易添加到正确的位置。(比如在foo的开头添加额外的逻辑)

调用不需要参数的事件时,考虑使用:

foo(this, EventArgs.Empty);

根据EventArgs msdn描述

传递一个不包含任何数据的对象,使用Empty字段。

按照惯例,事件处理程序应该总是包含一些发送方和一个EventArgs对象。