动作和事件动作之间有什么区别

时间:2019-01-22 00:58:17

标签: c#

阅读一些代码后,我注意到一些类具有Actions,但是只有其中一些也是事件:

public Action OnAction1;
public event Action OnAction2;

有什么区别?

1 个答案:

答案 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字段一样。

当然,通过显式实现这些访问器,您还可以执行其他操作,例如值验证或转换。