When/Why 您会在常规事件上使用 EventHandler 吗?
When/Why would you use a EventHandler over just a regular Event?
使用 EventHandler 和只定义事件在功能上有区别吗?
这是两个不同的东西
event
声明一个事件:
https://msdn.microsoft.com/en-us/library/8627sbea.aspx
EventHandler
定义事件将引发的方法:
https://msdn.microsoft.com/en-us/library/system.eventhandler(v=vs.110).aspx
EventHandler<TEventArgs>
是自定义 EventArgs
:
的便捷包装器
https://msdn.microsoft.com/en-us/library/db0etb8x(v=vs.110).aspx
订阅事件的不同方式
using System;
namespace ConsoleApplication3
{
internal class Program
{
private static void Main(string[] args)
{
// using a method
MyEvent += Program_MyEvent;
// using EventHandler, possible but not mandatory
MyEvent += new EventHandler(Target);
// using lambda syntax
MyEvent += (sender, eventArgs) => { };
// using delegate
MyEvent += delegate (object sender, EventArgs eventArgs) { };
// using delegate, signature is optional actually
MyEvent += delegate { };
}
private static void Target(object sender, EventArgs eventArgs)
{
}
private static void Program_MyEvent(object sender, EventArgs e)
{
}
public static event EventHandler MyEvent;
}
}
使用 EventHandler 和只定义事件在功能上有区别吗?
这是两个不同的东西
event
声明一个事件:
https://msdn.microsoft.com/en-us/library/8627sbea.aspx
EventHandler
定义事件将引发的方法:
https://msdn.microsoft.com/en-us/library/system.eventhandler(v=vs.110).aspx
EventHandler<TEventArgs>
是自定义 EventArgs
:
https://msdn.microsoft.com/en-us/library/db0etb8x(v=vs.110).aspx
订阅事件的不同方式
using System;
namespace ConsoleApplication3
{
internal class Program
{
private static void Main(string[] args)
{
// using a method
MyEvent += Program_MyEvent;
// using EventHandler, possible but not mandatory
MyEvent += new EventHandler(Target);
// using lambda syntax
MyEvent += (sender, eventArgs) => { };
// using delegate
MyEvent += delegate (object sender, EventArgs eventArgs) { };
// using delegate, signature is optional actually
MyEvent += delegate { };
}
private static void Target(object sender, EventArgs eventArgs)
{
}
private static void Program_MyEvent(object sender, EventArgs e)
{
}
public static event EventHandler MyEvent;
}
}