嗨,所以我试图在状态由于某种原因更新时更改此事件,它不允许我编译它给出了错误:
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;
时,它会上下文访问事件的自动生成的支持字段。