处理基本相同的OnClick事件处理程序的正确方法是什么?

时间:2014-08-15 19:24:43

标签: c# asp.net .net

假设我有一个按钮可以执行某些操作,并且它的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参数似乎不是一个选项,给出了编译器错误。

我有没有更好的选择?

2 个答案:

答案 0 :(得分:1)

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

我不认为有时候有点冗长是不好的,而选项二会给你带来一些小优势。

  • 您永远不必进行条件检查以查看foo中的参数是否为空。
  • 如果稍后添加更多逻辑,代码已经很好地分离,使得将它添加到正确的位置变得更容易。 (比如在foo的开头添加额外的逻辑)

答案 1 :(得分:0)

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

foo(this, EventArgs.Empty);

按照EventArgs msdn description

  

要传递不包含任何数据的对象,请使用空字段。

按照惯例,事件处理程序应始终包含一些发送者和EventArgs对象。