创建一个事件来监视变量的更改
本文关键字:变量 监视 事件 一个 创建 | 更新日期: 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
接口。
将BooleanValue的访问权限更改为private,并且只允许通过一种方法进行更改以保持一致性。
以该方法启动您的自定义事件
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在内存中移动对象的增加,托管代码更难正确实现。