Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为我的类创建事件处理程序_C#_.net - Fatal编程技术网

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出现之前,我还没有听说过这个接口。