gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:01:23 35 4
gpt4 key购买 nike

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

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;
}
}

感谢您的时间和帮助!

最佳答案

如果实现 custom events accessor ,然后他必须提供一个后备委托(delegate)字段,用于存储添加的回调:

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; 获取它,但您应该知道 events are not fields - 它们是一对方法 - 添加、删除。当您执行 var action = this.StateChanged; 时,编译器会根据上下文访问事件的自动生成的支持字段

关于c# - 该事件只能出现在 += 或 -= 错误的左侧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41641716/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com