11

假设我有:

public Boolean booleanValue;

public bool someMethod(string value)
{
   // Do some work in here.
   return booleanValue = true;
}

如何创建一个在 booleanValue 更改时触发的事件处理程序?是否可以?

4

6 回答 6

14

通常避免使用公共字段。尽量将它们保密。然后,您可以使用包装器属性触发您的事件。请参阅示例:

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 提供,但上述方法只是一个示例。

于 2013-01-07T04:47:53.420 回答
8

INotifyPropertyChanged已定义为通知属性是否更改。

将变量包装在属性中并使用INotifyPropertyChanged接口。

于 2013-01-07T04:49:03.940 回答
3
  1. 将 BooleanValue 的访问更改为私有,并且只允许通过一种方法更改它以保持一致性。

  2. 以该方法触发您的自定义事件

.

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标准的方式来做到这一点。

于 2013-01-07T04:46:56.843 回答
2

也许看看INotifyPropertyChanged界面。您一定会在将来再次使用它:

MSDN:http: //msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

于 2013-01-07T04:48:00.013 回答
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;
}
于 2013-01-07T04:49:23.960 回答
1

不,不可能*收到有关变量值更改的通知。

您可以通过使值成为某些类的属性并根据需要在更改时触发事件来实现几乎您想要的。

*) 如果您的代码是某个进程的调试器,您可以让 CPU 通知您更改 - 请参阅 Visual Studio 中的数据更改断点。这将需要至少一些本机代码,并且由于 GC 将对象移动到内存中,因此更难正确实现管理代码。

于 2013-01-07T04:50:20.923 回答