阅读一些代码时,我注意到一些类具有操作,但只有其中一些也是事件:
public Action OnAction1;
public event Action OnAction2;
有什么区别吗?
public Action OnAction1;
public event Action OnAction2;
有什么区别吗?
这实际上相当于字段和属性之间的区别,它增加了一个间接层,使您可以安全地添加或删除订阅者,而不会像属性一样暴露底层字段,从而保护对字段值的访问。
public Action OnAction1; // field
public Action OnAction2 { get; set; } // property
public event Action OnAction3; // event
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
字段一样。
当然,通过明确实现这些访问器,你还可以执行其他操作,如值验证或转换。