3

说,我写了一个类ClassA。它运行良好,直到有一天我希望监控属性值的变化并对变化做出反应。最快的方法是什么?

我能想到的一种方法:让ClassA继承 INotifyPropertyChanged,并修改属性 getter/setter 以触发 PropertyChanged 事件,并在事件触发时做一些事情。

但是,如果ClassA有 10 个要监控的属性,这可能意味着繁琐的代码更改。

有没有更优雅的方式来包装或修改ClassA,以便我可以连接一些反应逻辑?

幻想:属性能做到吗?也许完全是胡说八道,我写了一个属性,我只需要将这个属性添加到我希望监控的属性中。它比添加/修改 getter/setter 更好。

4

1 回答 1

1

您可能想要研究的是使用 AOP(面向方面​​编程)简而言之,这允许您在类方法和属性周围放置一个包装器,并在调用之前和之后做出反应。

在包装类中,您将拥有类似的东西

Invoke(Args[] Args, Aspect Aspect)
{
  //Do something like monitor something here 
  Aspect.Invoke //execution of method or property
 //Do other stuff here... maybe more monitoring
}

这样做的美妙之处在于关注点分离。在您的 ClassA 中,您的代码可以继续关注之前关注的任何内容,而无需担心监控代码。包装器是处理监控的东西。

参考资料:

有关 AOP 的更多信息 http://en.wikipedia.org/wiki/Aspect-oriented_programming

可用于在应用程序中实现 AOP 的 C# 库。城堡项目/动态代理 http://www.castleproject.org/projects/dynamicproxy

于 2012-12-16T08:29:59.017 回答