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