是否可以为 bool 切换时制作类似事件处理程序的东西?
Is it possible to make something like an event handler for when a bool toggles?
说我有一个变量 doSomethingWhenTrue
。现在假设它是 false
。现在,每次它切换值时,我都希望它执行类似于此的函数:
private void someResponseToToggledBool()
{
If(boolInQuestion)
{
//do some stuff
boolInQuestion = false;
}
}
有人知道怎么做吗?我的(蹩脚的)想法是制作一个计时器并将此函数分配给它的刻度值并将其扔到另一个线程上......但是必须有比正确的更直接的方法吗?
您可以使用 属性
private bool _boolInQuestion;
public bool BoolInQuestion
{
get { return _boolInQuestion; }
set
{
_boolInQuestion = value;
//call method to do something
}
}
在 setter 中,您还可以引发一个事件,该事件由需要对切换做出反应的任何人处理,甚至可以实现 INotifyPropertyChanged
(https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx)
编辑
根据您的评论,您希望此 属性 是静态的。您可以通过将字段和 属性 都声明为 static
:
来实现
private static bool _boolInQuestion;
public static bool BoolInQuestion
{
get { return _boolInQuestion; }
set
{
_boolInQuestion = value;
//call method to do something
}
}
但这需要在 setter 中调用的方法也是 static
。或者,您可以保持 属性 非静态并实现 Singleton:
public sealed class BoolHolder
{
private BoolHolder() { }
private static BoolHolder instance = null;
public static BoolHolder Instance
{
get
{
if (instance == null)
{
instance = new BoolHolder();
}
return instance;
}
}
private bool _boolInQuestion;
public bool BoolInQuestion
{
get { return _boolInQuestion; }
set
{
_boolInQuestion = value;
//call method to do something
}
}
}
并以 BoolHolder.Instance.BoolInQuestion
的形式访问它
使用 属性
private bool _doSomethingWhenTrue;
public bool doSomethingWhenTrue
{
get
{
return _doSomethingWhenTrue;
}
set
{
_doSomethingWhenTrue = value;
someResponseToToggledBool();
}
}
说我有一个变量 doSomethingWhenTrue
。现在假设它是 false
。现在,每次它切换值时,我都希望它执行类似于此的函数:
private void someResponseToToggledBool()
{
If(boolInQuestion)
{
//do some stuff
boolInQuestion = false;
}
}
有人知道怎么做吗?我的(蹩脚的)想法是制作一个计时器并将此函数分配给它的刻度值并将其扔到另一个线程上......但是必须有比正确的更直接的方法吗?
您可以使用 属性
private bool _boolInQuestion;
public bool BoolInQuestion
{
get { return _boolInQuestion; }
set
{
_boolInQuestion = value;
//call method to do something
}
}
在 setter 中,您还可以引发一个事件,该事件由需要对切换做出反应的任何人处理,甚至可以实现 INotifyPropertyChanged
(https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx)
编辑
根据您的评论,您希望此 属性 是静态的。您可以通过将字段和 属性 都声明为 static
:
private static bool _boolInQuestion;
public static bool BoolInQuestion
{
get { return _boolInQuestion; }
set
{
_boolInQuestion = value;
//call method to do something
}
}
但这需要在 setter 中调用的方法也是 static
。或者,您可以保持 属性 非静态并实现 Singleton:
public sealed class BoolHolder
{
private BoolHolder() { }
private static BoolHolder instance = null;
public static BoolHolder Instance
{
get
{
if (instance == null)
{
instance = new BoolHolder();
}
return instance;
}
}
private bool _boolInQuestion;
public bool BoolInQuestion
{
get { return _boolInQuestion; }
set
{
_boolInQuestion = value;
//call method to do something
}
}
}
并以 BoolHolder.Instance.BoolInQuestion
使用 属性
private bool _doSomethingWhenTrue;
public bool doSomethingWhenTrue
{
get
{
return _doSomethingWhenTrue;
}
set
{
_doSomethingWhenTrue = value;
someResponseToToggledBool();
}
}