有人可以解释以下代码部分的含义:

private event UserChangedHandler m_UserChanged;
public event UserChangedHandler UserChanged
{
  add
  {
      if (m_UserChanged != value)
      {
        m_UserChanged += value;
      }
  }
}


谢谢

最佳答案

add { }是一种类似于get { }的属性构造,除了在事件上添加作品。在将委托添加到事件时,您在此处定义自定义功能。

在这种情况下,此方法主体可防止连续重复(即,您不能连续两次注册相同的方法/处理程序)。

因此,在此示例中:

public void HandlerUserChanged(object o, UserChangedEventArgs args)
{
     // some code
}

public void HandlerUserChanged2(object o, UserChangedEventArgs args)
{
     // some code
}


后来:

UserChanged += HandleUserChanged;
UserChanged += HandleUserChanged;
UserChanged(this, new UserChangedEventArgs());


即使您注册了两次,方法HandleUserChanged也只会触发一次。正常事件(没有add { })将调用该函数两次。

然而:

UserChanged += HandleUserChanged;
UserChanged += HandleUserChanged2;
UserChanged += HandleUserChanged;
UserChanged(this, new UserChangedEventArgs());


将允许HandleUserChanged触发两次,因为最后注册的处理程序永远不会被添加。事件的==运算符适用于LAST处理程序。 (感谢Matthew提请注意)

09-17 19:33