每次对象改变状态时,有没有办法执行操作?

时间:2016-10-17 13:45:59

标签: c#

我有一个传递给接口的对象,我希望每次对象的一个​​成员改变状态时,该接口后面的具体操作就会执行一些动作。换句话说,我有一些包含整数的对象。当该整数的值发生变化时,我希望我的具体类位于该接口后面做一些工作。

现在,我可以做一些这样的事情,让一个线程处于wait状态,并在使用pulse完成一些monitor后执行操作。但是,我想知道C#语言是否有这种东西固有的支持。这样,当对象的成员改变状态时,将自动执行该动作。我知道这可能是不可能的,如果有替代解决方案,我想听听。或者,线程的事情听起来是个好主意吗?

3 个答案:

答案 0 :(得分:2)

  1. 使用setter属性封装对象的状态。
  2. 向setter属性添加更多代码以引发事件或调用方法。

答案 1 :(得分:2)

您应该实现INotifyPropertyChanged,并在INotifyPropertyChanged之后继承您的接口。然后介绍所有状态相关事物的属性,并始终在setter方法中触发PropertyChanged事件。

这需要一些样板代码,但它是非常可靠的解决方案。您可以将属性设置为虚拟,并使用Unity等IoC容器为您实现样板。

实现完成后,您只需使用+ =运算符订阅对象的PropertyChanged事件。

  myWatchedObject.ProperyChanged += listener.DependentObjectChangeHandler;

答案 2 :(得分:0)

最简单的方法是属性:

class MyClass
{
    private int _MyInteger;
    public int MyInteger 
    { 
        get { return _MyInteger; } 
        set { _MyInteger = value; /* insert your "do some work" code here */ } 
    }
}