3

我有一个方法

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

我希望其他代码调用此方法。(并不真的需要sendere

就像是 :

Item_Click(null, null)

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

鼠标悬停在上面显示:

在此处输入图像描述

等等……什么?

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

就像string.empty代表空字符串一样。

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

1 回答 1

4

这只是糟糕的文档,将两个概念混为一谈。最新的文档似乎好一点

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

问题是“一个事件”有两个不同的含义:

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

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

(“委托”这个词也很糟糕,用来描述委托类型和它们的实例。)

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

顺便说一句,如果您想在引发事件时调用该方法我可能会将其分为两种方法:

// 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(); };

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

于 2013-05-02T08:56:53.950 回答