Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当bool切换时,是否可以制作类似事件处理程序的东西?_C#_Variables_Event Handling_Toggle - Fatal编程技术网

C# 当bool切换时,是否可以制作类似事件处理程序的东西?

C# 当bool切换时,是否可以制作类似事件处理程序的东西?,c#,variables,event-handling,toggle,C#,Variables,Event Handling,Toggle,假设我有一个变量dosomethingwhen为true。现在让我们假设它是false。现在,每当它切换值时,我希望它执行类似于以下内容的函数: private void someResponseToToggledBool() { If(boolInQuestion) { //do some stuff boolInQuestion = false; } } 有人知道怎么做吗?我(蹩脚的)想法是制作一个计时器,将这个函数分配给它的tick

假设我有一个变量
dosomethingwhen为true
。现在让我们假设它是
false
。现在,每当它切换值时,我希望它执行类似于以下内容的函数:

private void someResponseToToggledBool()
{
    If(boolInQuestion)
    {
        //do some stuff
        boolInQuestion = false;
    }
}
有人知道怎么做吗?我(蹩脚的)想法是制作一个计时器,将这个函数分配给它的tick值,然后将它扔到另一个线程上。。。但是必须有一种更直接的方法,对吗?

您可以使用属性

private bool _boolInQuestion;
public bool BoolInQuestion
{
    get { return _boolInQuestion; }
    set
    {
         _boolInQuestion = value;
         //call method to do something
    }
}
private bool _doSomethingWhenTrue;
public bool doSomethingWhenTrue
{
    get
    {
        return _doSomethingWhenTrue;
    }
    set
    {
        _doSomethingWhenTrue = value;
        someResponseToToggledBool();
    }
 }
在setter中,您还可以引发一个事件,该事件由需要对切换做出反应的人处理,甚至可以执行
INotifyPropertyChanged
()

编辑

根据您的评论,您希望此属性是静态的。您可以通过将字段和属性声明为static来实现这一点:

    private static bool _boolInQuestion;
    public static bool BoolInQuestion
    {
        get { return _boolInQuestion; }
        set
        {
            _boolInQuestion = value;
            //call method to do something
        }
    }
但这将要求setter中调用的方法也是静态的。或者,您可以保持属性非静态,并实现:

并作为
BoolHolder.Instance.BoolInQuestion
使用属性访问它

private bool _boolInQuestion;
public bool BoolInQuestion
{
    get { return _boolInQuestion; }
    set
    {
         _boolInQuestion = value;
         //call method to do something
    }
}
private bool _doSomethingWhenTrue;
public bool doSomethingWhenTrue
{
    get
    {
        return _doSomethingWhenTrue;
    }
    set
    {
        _doSomethingWhenTrue = value;
        someResponseToToggledBool();
    }
 }

必须等待7分钟才能标记为答案,但这是完美的tyvm。如果我想从另一个类设置
BoolInQuestion
的值,我该怎么做?您可以将
私有
字段和
公共
属性
静态
,另外,在setter中调用的方法也需要是静态的。您可以编辑您的答案以显示示例吗?当我说
公共静态bool BoolInQuestion
我得到errors@J.Doe编辑答案。。根据您的用例,您可能需要简单的
静态
解决方案或Singleton实现Markus,如果我想从另一个类设置bool的值,我该怎么做?我现在不能设置它,因为我可以使这个bool静态,只需注意:你可能想在设置字段值后调用该方法通常只需设置变量静态有什么问题?设置时执行的方法修改表单控件(在winforms中工作)。这些控件不能从静态方法进行操作,因此我的函数不是静态的,因此不能在set部分使用…:(使用属性时,无需将其声明为静态