观察对象状态
本文关键字:状态 对象 观察 | 更新日期: 2023-09-27 18:16:16
我在使用angular-js时发现了一个有趣的特性,它可以观察对象的变化。
我想知道c#中是否有类似的东西。我想创建一些监视器,它将接受要监视的对象,并可能定期检查对象的哈希码,以发现对象是否更改,然后引发事件。但这似乎有点低效。
任何想法?
谢谢
无论如何都不能工作,首先因为没有要求属性更改影响哈希码,其次,即使它确实影响了哈希码,也有可能使新的哈希码等于旧的哈希码。
AngularJS所做的是跟踪最后已知的值,然后重新加载所有的值,并将它们与之前的值进行比较。如果它们不再相等,则表示发生了变化。
如果你愿意,你可以在c#中做同样的事情。
但是在c#中更常见的一种方式是让被监视的对象实现INotifyPropertyChanged
接口,并在每次属性更改时引发PropertyChanged
事件。这使对象能够通知任何感兴趣的监视程序属性已更改,而不需要监视程序进行任何轮询。
在JavaScript和c#中,对象本身都不是可观察的。
实际上,Angular在底层将对象转换为可观察对象,由于JavaScript是一种动态类型语言,这种转换或包装可以轻松完成。
由于c#是一种强类型语言,如果对象没有实现接口或可以公开事件以订阅更改的东西,则无法观察对象。通常可观察对象应该实现INotifyPropertyChanged
接口。
另一种实现方法是使用像Castle DynamicProxy这样的框架来创建类的代理,并拦截方法调用和属性get和set。