说我有一个变量doSomethingWhenTrue
。现在让我们说它是false
。现在,每当它切换值时,我希望它执行类似于此的函数:
private void someResponseToToggledBool()
{
If(boolInQuestion)
{
//do some stuff
boolInQuestion = false;
}
}
任何人都知道该怎么做?我的(糟糕的)想法是制作一个计时器并将此函数分配给它的刻度值并将其抛给另一个线程...但是必须有一种比这更直接的方法吗?
答案 0 :(得分:2)
您可以使用属性
private bool _boolInQuestion;
public bool BoolInQuestion
{
get { return _boolInQuestion; }
set
{
_boolInQuestion = value;
//call method to do something
}
}
在设置者中,您还可以提出由需要对切换做出反应的人处理的事件,甚至可以执行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
答案 1 :(得分:1)
使用属性
URL