是否有一种方法在每次对象改变状态时执行一个动作

本文关键字:执行 状态 一个 改变 一种 方法 是否 对象 | 更新日期: 2023-09-27 18:13:26

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

现在,我可能会做这样的事情,有一个线程,坐在wait状态,并执行动作,一旦一些pulse是使用monitor完成。但是,我想知道c#语言是否对这种事情有内在的支持。这样,当对象的成员改变状态时,操作将自动执行。我知道这可能是不可能的,如果有其他的解决方案,我希望听到。或者,线程听起来是个好主意吗?

是否有一种方法在每次对象改变状态时执行一个动作

你应该实现INotifyPropertyChanged,也继承你的接口后INotifyPropertyChanged。然后为所有与状态相关的事物引入属性,并且总是在setter方法中触发PropertyChanged事件。

这需要一些样板代码,但它是非常可靠的解决方案。你可以让你的属性是虚拟的,并使用IoC容器(如Unity)为你实现样板。

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

  myWatchedObject.ProperyChanged += listener.DependentObjectChangeHandler;
  1. 使用setter属性封装对象的状态。
  2. 为setter属性添加更多代码以引发事件或调用方法。

最简单的方法是:

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