我们只说我有:
public Boolean booleanValue;
public bool someMethod(string value)
{
// Do some work in here.
return booleanValue = true;
}
如何创建一个在booleanValue发生变化时触发的事件处理程序?有可能吗?
答案 0 :(得分:13)
通常避免使用公共字段作为规则。尽量保持私密性。然后,您可以使用激活事件的包装器属性。参见示例:
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提供的,但上面的方法只是一个例子。
答案 1 :(得分:7)
INotifyPropertyChanged已定义为通知属性是否已更改。
将变量包装在属性中并使用INotifyPropertyChanged
接口。
答案 2 :(得分:3)
将BooleanValue的访问权限更改为私有,并且只允许通过一种方法更改它以保持一致。
在该方法中触发自定义事件
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标准的做法。
答案 3 :(得分:2)
或许看一下INotifyPropertyChanged
界面。您将来必然会再次使用它:
MSDN:http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx
答案 4 :(得分:2)
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;
}
答案 5 :(得分:2)
不可能*获得有关变量值变化的通知。
你可以通过使值成为某个类的属性并根据需要触发事件来实现你想要的几乎所有。
*)如果您的代码是进程的调试器,您可以让CPU通知您有关更改的信息 - 请参阅Visual Studio中的数据chage断点。由于GC会在内存中移动对象,因此至少需要一定数量的本机代码,并且更难以正确实现manged代码。