事件Action和事件EventHandler的区别<EventArgs>
Difference between event Action and event EventHandler<EventArgs>
使用 Action
声明事件时出现什么问题
public interface ISomething
{
event Action MyEventName;
}
或
public interface ISomething
{
event Action<bool> MyBoolEventName;
}
而不是之前代码的其他变体使用 EventHandler 和 EventArgs 声明事件
public interface ISomething
{
event EventHandler<EventArgs> MyEventName;
}
或
public class EventArgsWithBool : EventArgs
{
private readonly bool someValue;
public EventArgsWithBool (bool someValue)
{
this.someValue = someValue;
}
public bool SomeValue
{
get { return this.someValue; }
}
}
public interface ISomething
{
event EventHandler<EventArgsWithBool> MyBoolEventName;
}
我的想法:
两个版本都适合我,我认为第一个版本更具可读性/看起来更直接。但一些开发人员表示,最好将第二种语法与 EventArgs 一起使用,但不能给出充分的技术原因(除非他们知道第二种语法)。
使用第一个有什么技术问题要面对吗?
当您使用 Action 时,您没有将 Sender 对象传递给事件处理程序。有时,事件处理程序知道是什么对象触发了事件很有用。
使用 Action
声明事件时出现什么问题public interface ISomething
{
event Action MyEventName;
}
或
public interface ISomething
{
event Action<bool> MyBoolEventName;
}
而不是之前代码的其他变体使用 EventHandler 和 EventArgs 声明事件
public interface ISomething
{
event EventHandler<EventArgs> MyEventName;
}
或
public class EventArgsWithBool : EventArgs
{
private readonly bool someValue;
public EventArgsWithBool (bool someValue)
{
this.someValue = someValue;
}
public bool SomeValue
{
get { return this.someValue; }
}
}
public interface ISomething
{
event EventHandler<EventArgsWithBool> MyBoolEventName;
}
我的想法:
两个版本都适合我,我认为第一个版本更具可读性/看起来更直接。但一些开发人员表示,最好将第二种语法与 EventArgs 一起使用,但不能给出充分的技术原因(除非他们知道第二种语法)。
使用第一个有什么技术问题要面对吗?
当您使用 Action 时,您没有将 Sender 对象传递给事件处理程序。有时,事件处理程序知道是什么对象触发了事件很有用。