声明event Action<>和声明之间有什么不同吗event EventHandler<>?
假设实际引发事件的对象无关紧要.
例如:
public event Action<bool, int, Blah> DiagnosticsEvent;
Run Code Online (Sandbox Code Playgroud)
VS
public event EventHandler<DiagnosticsArgs> DiagnosticsEvent;
class DiagnosticsArgs : EventArgs
{
public DiagnosticsArgs(bool b, int i, Blah bl)
{...}
...
}
Run Code Online (Sandbox Code Playgroud)
两种情况下的使用情况几乎相同:
obj.DiagnosticsEvent += HandleDiagnosticsEvent;
Run Code Online (Sandbox Code Playgroud)
关于event EventHandler<>模式,有几件我不喜欢的事情:
更多代码意味着维护更多代码而没有任何明显的优势.
结果,我更喜欢 event Action<>
但是,只有在Action <>中有太多类型参数时,才需要额外的类.
我刚刚在一个项目上运行VS2012代码分析工具,发现它抱怨这个代码片段:
public delegate void PerMbHandler(long totalMb);
public event PerMbHandler NotifyMegabyteIncrement;
Run Code Online (Sandbox Code Playgroud)
CA1009将"MyWebClient.PerMbHandler"的第二个参数声明为EventArgs,或者是一个扩展EventArgs的类型的实例,名为"e".
事件处理程序方法有两个参数.第一个是System.Object类型,名为"sender".这是引发事件的对象.第二个参数是System.EventArgs类型,名为"e".这是与事件关联的数据.例如,如果在打开文件时引发事件,则事件数据通常包含文件的名称.
MSDN简单地说明了约定是什么,而不是它存在的原因.
使用long参数而不是EventArgs的子类会出什么问题?这是一个常规和程序员期望的问题,还是有一些微妙的技术原因必须遵循这种模式?我说微妙,因为代码似乎工作正常.
我的WinForm C#应用程序上的MouseEvents有问题.我希望鼠标点击我的应用程序.如何确定点击了哪个控件?(我是初学者C#)