Мне кажется странным, что m_UserChanged объявлен как событие, а не просто как экземпляр делегата (это правильная терминология ... я запутался с делегатами).События аналогичны простой модели Property в том, что они по существу обертывают базовые поля в паре прозрачных методов.
Насколько я понимаю, .Net позволяет создавать неявные (анонимные?) События и свойства, принимая что-то вроде этого:
public int Value { get; set;}
public event EventHandler ValueChanged;
, а затем создавая соответствующие базовые объекты-заполнители.чтобы сгенерировать что-то более похожее на это:
private int _Value;
public int Value { get { return _Value;} set { _Value = value;}}
private EventHandler _ValueChanged;
public event EventHandler ValueChange { add { _ValueChanged += value;} remove { _ValueChanged -= value;}}
Базовый объект, конечно, может быть определен явно, но то, как выглядит пример кода выше, является чем-то вроде сочетания явного и неявного объявления событияпохоже, что на самом деле делается следующее (как бы за кадром):
private UserChangedHandler _m_UserChanged;
private event UserChangedHandler m_UserChanged { add { _m_UserChanged += value;} remove { _m_UserChanged -= value;}}
public event UserChangedHandler UserChanged
{
add
{
if (m_UserChanged != value)
{
m_UserChanged += value;
}
}
}
Это не имеет большого значения в общем плане вещей, я не думаю, но похоже, чтонедосмотр.