可能是重复的问题:
C#中为什么事件需要(sender, EventArgs)?
我刚在一个项目上运行了VS2012代码分析工具,并发现它抱怨这段代码:
public delegate void PerMbHandler(long totalMb);
public event PerMbHandler NotifyMegabyteIncrement;
CA1009声明'MyWebClient.PerMbHandler'的第二个参数为EventArgs类型或命名为'e'的扩展EventArgs类型的实例。
事件处理程序方法需要两个参数。第一个参数是类型为System.Object且命名为'sender'的对象,这是引发事件的对象。第二个参数是类型为System.EventArgs且命名为'e'的数据,它与事件相关联。例如,如果事件在每次打开文件时触发,则事件数据通常包含文件的名称。
MSDN简单说明了惯例,而不是存在的原因。
使用长参数而不是 EventArgs 的子类会出现什么问题?这是约定和程序员期望的问题,还是必须遵循该模式的一些微妙技术原因?我说微妙,因为代码似乎工作得很好。