该事件只能出现在 += 或 -= 错误的左侧



嗨,所以我试图在状态由于某种原因更新时更改此事件,它不允许我编译它给出了错误:

The event 'Entity.StateChanged' can only appear on the left hand side of += or -=

我不知道出了什么问题,似乎是对的,我尝试了谷歌它没有帮助

public Entity.State state
{
    get
    {
        return this._state;
    }
    set
    {
        if (this._state != value)
        {
            this._state = value;
            this.OnStateChanged();
        }
    }
}
protected virtual void OnStateChanged()
{
    if (this.StateChanged != null)
    {
        this.StateChanged();
    }
}
public event Action StateChanged
{
    [MethodImpl(MethodImplOptions.Synchronized)]
    add
    {
        this.StateChanged += value;
    }
    [MethodImpl(MethodImplOptions.Synchronized)]
    remove
    {
        this.StateChanged -= value;
    }
}

谢谢你们的时间和帮助!

如果实现自定义事件访问器,那么他必须提供一个后备委托字段,该字段将用于存储添加的回调:

protected virtual void OnStateChanged()
{
    var stateChanged = this._stateChanged;
    if (stateChanged == null)
        return;
    stateChanged();
}
private Action _stateChanged;
public event Action StateChanged
{
    [MethodImpl(MethodImplOptions.Synchronized)]
    add
    {
        this._stateChanged += value;
    }
    [MethodImpl(MethodImplOptions.Synchronized)]
    remove
    {
        this._stateChanged -= value;
    }
}

但是为什么它适用于标准/非自定义事件,例如 public event Action StateChanged;

因为编译器会自动为该事件生成一个支持字段,您可以使用var action = this.StateChanged;获取它,但您应该知道事件不是字段 - 它们是一对方法 - add, remove .它是编译器,当您执行 var action = this.StateChanged; 时,它会上下文访问事件的自动生成的支持字段

相关内容

  • 没有找到相关文章

最新更新