阅读一些代码后,我注意到一些类具有Actions,但是只有其中一些也是事件:
public Action OnAction1;
public event Action OnAction2;
有什么区别?
答案 0 :(得分:2)
它实际上与字段和属性之间的区别相同,它增加了一个间接级别,使您可以安全地添加或删除订户,而不会像属性保护对字段值的访问一样公开基本字段。 / p>
public Action OnAction1; // field
public Action OnAction2 { get; set; } // property
public event Action OnAction3; // event
与属性一样,事件可以“自动实现”,这意味着为您生成了一个底层支持字段。
就像属性可以具有显式的getter和setter一样:
private Action onAction2;
public Action OnAction2
{
get
{
return onAction2;
}
set
{
onAction2 = value;
}
}
事件可以具有显式的添加和删除处理程序:
private Action onAction3;
public event Action OnAction3
{
add
{
onAction3 += value;
}
remove
{
onAction3 -= value;
}
}
外部类无法通过onAction3
事件直接访问基础OnAction3
字段,就像您无法通过onAction2
属性直接访问OnAction2
字段一样。
当然,通过显式实现这些访问器,您还可以执行其他操作,例如值验证或转换。