C# 布尔值改变事件

9
我能否设置一个事件监听器,以便在布尔值发生变化时调用函数?
4个回答

17

你应该在C#中使用属性,这样你就可以在setter中添加任何处理(例如日志记录、触发事件等)。

private Boolean _boolValue
public Boolean BoolValue
{
    get { return _boolValue; }
    set
    {
        _boolValue = value;
        // trigger event (you could even compare the new value to
        // the old one and trigger it when the value really changed)
    }
}

我有点迷惑了。你能给我提供一个例子来帮助我吗? - brux
属性在很多方面都非常好用。我建议您始终将其用于公共数据(而不是成员变量)。这样可以更轻松地进行更改或添加,并且您可以在接口中指定它们,而对于成员变量则无法做到这一点... - jdehaan

7
手动操作,是的,你可以。
public delegate void SomeBoolChangedEvent();
public event SomeBoolChangedEvent SomeBoolChanged;

private bool someBool;
public bool SomeBool
{
    get
    {
        return someBool;
    }
    set
    {
        someBool = value;
        if (SomeBoolChanged != null) 
        {
             SomeBoolChanged();
        }
    }   
}

不确定这是否是您寻找的内容。


5
重要的问题是:当一个boolwhat发生变化时?
由于bool是值类型,您不能直接传递对它的引用。因此,谈论像bool本身上的Changed事件是没有意义的——如果bool发生了变化,它会被另一个bool替换,而不是修改。
如果我们讨论的是引用类型上的bool字段或属性,则情况就会有所改变。在这种情况下,公开bool作为属性(公共字段不被看好),并使用INotifyPropertyChanged.PropertyChanged事件来提高“已更改”通知是一种被接受的做法。

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接