C# 如何为我的类创建事件处理程序
我有以下课程C# 如何为我的类创建事件处理程序,c#,.net,C#,.net,我有以下课程 public class ButtonChange { private int _buttonState; public void SetButtonState(int state) { _buttonState = state; } } 我想在\u buttonState值更改时触发事件,最后我想在ButtonChange 你们能帮帮我吗 附言:我不想使用INotifyPropertyChanged谷歌“c#事件msdn”自助
public class ButtonChange
{
private int _buttonState;
public void SetButtonState(int state)
{
_buttonState = state;
}
}
我想在\u buttonState
值更改时触发事件,最后我想在ButtonChange
你们能帮帮我吗
附言:我不想使用INotifyPropertyChanged谷歌“c#事件msdn”自助
如果您使用的是普通c#。INotifyPropertyChanged用于WPF-POCO/简单类型事件不需要它
public class ButtonChange
{
// Starting off with an empty handler avoids pesky null checks
public event EventHandler StateChanged = delegate {};
private int _buttonState;
// Do you really want a setter method instead of a property?
public void SetButtonState(int state)
{
if (_buttonState == state)
{
return;
}
_buttonState = state;
StateChanged(this, EventArgs.Empty);
}
}
如果希望StateChanged
事件处理程序了解新状态,可以从EventArgs
派生自己的类,例如buttonnstateeventargs
,然后使用事件类型EventHandler
请注意,此实现不尝试线程安全。基于属性的事件引发:
public class ButtonChange
{
private int _buttonState;
public int ButtonState
{
get { return _buttonState; }
set
{
if (_buttonState == value)
return;
_buttonState = value;
OnButtonStateChanged();
}
}
public event EventHandler ButtonStateChanged;
private void OnButtonStateChanged()
{
if (this.ButtonStateChanged != null)
this.ButtonStateChanged(this, new EventArgs());
}
}
避免讨厌的空检查的好方法。我没有想过要那样做。不知道为什么。可能是自动的机器人习惯。非常感谢Jon,对于StateChanged事件,我没有分配任何空的处理程序,但它仍然有效,是否有必要这样做,你能给我解释一下吗?如果你没有“=delegate{}”位,那么如果没有人订阅该事件,但你还是尝试引发它,您将得到一个NullReferenceException.INotifyPropertyChanged不仅仅适用于WPF,它还用于通知客户机(通常是绑定客户机)属性值已更改(来自MSDN),从技术上讲,它可以使用。。然而,它是WPF数据绑定的基石;就我个人而言,在WPF出现之前,我还没有听说过这个接口。