C#-在声明类之外调用事件

本文关键字:调用 事件 声明 C#- | 更新日期: 2023-09-27 18:20:39

我在类Alice中有一个事件,我想在派生类Bob:中引发它

public class Alice
{
    public event Action<object> ValueChanged;
}
public class Bob : Alice
{
    public void method1(Alice bigAlice)
    {
        // raise ValueChanged event
        // or
        // raise ValueChanged event on bigAlice
    }
}

编译器错误表明,如果我不在事件的声明类中,则只能使用+=-=。然而,我如何从Bob的代码中激发该事件?

C#-在声明类之外调用事件

不能在声明类之外的任何地方引发事件。

在引发事件的基类中创建一个受保护的方法,并从子类中调用它。

您可以公开一个受保护的方法来调用它:

public class Alice {
  public event Action<object> ValueChanged;
  protected void RaiseValueChanged(object o) {
    if (ValueChanged != null) {
      ValueChanged(o);
    }
  }
}

您可以这样做,创建一个受保护的方法来激发事件,并从Bob方法调用它。编辑:根据@spender 的建议,删除了可能的比赛条件问题

    public class Alice
    {
        public event Action<object> ValueChanged;
        protected void OnValueChanged(object arg)
        {
            Action<object> temp = ValueChanged;
            if (temp != null)
            {
                temp (arg);
            }
        }
    }
    public class Bob : Alice
    {
        public void method1()
        {
            object o = null;
            OnValueChanged(o);
        }
    }