创建一个事件来监视变量的更改

本文关键字:变量 监视 事件 一个 创建 | 更新日期: 2023-09-27 17:51:00

假设我有:

public Boolean booleanValue;
public bool someMethod(string value)
{
   // Do some work in here.
   return booleanValue = true;
}

如何创建一个在booleanValue更改时启动的事件处理程序?有可能吗?

创建一个事件来监视变量的更改

通常避免使用公共字段作为规则。尽量把它们保密。然后,您可以使用包装器属性来触发事件。参见示例:

class Foo
{
    Boolean _booleanValue;
    public bool BooleanValue
    {
        get { return _booleanValue; }
        set
        {
            _booleanValue = value;
            if (ValueChanged != null) ValueChanged(value);
        }
    }
    public event ValueChangedEventHandler ValueChanged;
}
delegate void ValueChangedEventHandler(bool value);

这是一种简单的、"原生"的方式来实现你所需要的。还有其他方法,甚至由.NET Framework提供,但上面的方法只是一个例子。

已经定义了INotifyPropertyChanged来通知属性是否已更改。

将变量包装在属性中并使用INotifyPropertyChanged接口。

  1. 将BooleanValue的访问权限更改为private,并且只允许通过一种方法进行更改以保持一致性。

  2. 以该方法启动您的自定义事件

private bool _boolValue;
public void ChangeValue(bool value)
{
    _boolValue = value;
   // Fire your event here
}

选项2:使其成为属性并在setter 中激发事件

public bool BoolValue { get { ... }  set { _boolValue = value; //Fire Event } }

编辑:正如其他人所说,INotifyPropertyChanged是实现这一点的.NET标准方法。

也许可以看看INotifyPropertyChanged接口。你一定会在未来再次发现它的用途:

MSDN:http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

CallingClass.BoolChangeEvent += new Action<bool>(AddressOfFunction);

在您的类中使用bool属性过程:

public event Action<bool> BoolChangeEvent;
public Boolean booleanValue;
public bool someMethod(string value)
{
   // Raise event to signify the bool value has been set.
   BoolChangeEvent(value);
   // Do some work in here.
   booleanValue = true;
   return booleanValue;
}

不可能*收到变量值更改的通知。

通过使值成为某个类的属性,并根据您的意愿在更改时触发事件,您几乎可以实现您想要的结果。

*)如果您的代码是进程的调试器,则可以让CPU通知您更改的情况-请参阅Visual Studio中的数据更改断点。这将需要至少一定数量的本地代码,并且由于GC在内存中移动对象的增加,托管代码更难正确实现。