EventArgs.Empty澄清?

时间:2013-05-02 08:55:28

标签: c# .net eventargs

我有一个方法

protected void Item_Click(object sender, EventArgs e)
{     }

我想要其他代码来调用此方法。 (实际上并不需要sendere

类似的东西:

Item_Click(null, null)

但后来我记得我可以改用EventArgs.Empty

鼠标悬停在它上面显示:

enter image description here

等等......什么?

EventArgs.Empty代表一个事件?它不是。它应该代表空参数而不是事件。

就像string.empty代表空字符串

  • 我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:4)

这只是糟糕的文档,将一个词中的两个概念混为一谈。 latest documentation似乎更好:

  

提供用于没有事件数据的事件的值。

麻烦在于“事件”有两个不同的含义:

  • 您可以订阅的事件
  • 正在引发该事件的单个“实例”

例如,说:“订阅KeyPress事件以接收与键盘相关的事件是不合理的。”

(“委托”一词同样糟糕,用于描述委托类型及其实例。)

这一切都很不幸,但请放心,你有正确的想法。

顺便说一句,如果你想调用方法 other 而不是引发事件,我可能会把它分成两个方法:

// This only exists to handle the event, delegating to the DoSomething method
private void HandleItemClicked(object sender, EventArgs e)
{
    DoSomething();
}

// This can be called from other code, and should be named according to what it
// does.
private void DoSomething()
{
}

如果您手动订阅该活动,则甚至不需要额外的方法:

item.Click += delegate { DoSomething(); };

通过这种方式,您可以清楚地表明您的“真实”方法并不关心发送方或事件参数,并且在调用它时不需要提供“虚拟”值。