有什么区别?对我来说,它们看起来很相似。。。你为什么要用一个而不是另一个?
它们的相似之处在于,它们都将存储最后给定的值&您可以通过公共财产访问它们。
区别在于:
ReactiveProperty
将发出事件,当且仅当值已更改- 无论新值是什么,
BehaviorSubject
都将发出一个事件
在他们的C#代码(开源(中,ReacitveProperty
检查新值和上一个值的相等性;BehaviorSubject
没有。事实上,没有一个ISubject
实现检查相等性。
什么时候应该使用一个而不是另一个?
当我只想在值更改时进行回调时,我会使用ReactiveProperty
,即使替换可能更频繁。每当替换发生时,当我想要回调时,我会使用BehaviourSubject
。
在大多数情况下,ReactiveProperty
更有用,因为通常您希望对更改做出反应。CCD_ 9有它自己的用途,尽管不太常见。
其他注意事项:
ReactiveProperty.SetValueAndForceNotify()
可用于调用回调,而不考虑相等性- CCD_ 11可以用于(次要地(引入相等性检查
除了其他答案中提到的差异外,BehaviorSubject
与ReactiveProperty
相比封装得更多。即:
BehaviorSubject.Value
仅为get
(但.OnNext(value)
仍然公开可用(- CCD_ 17是可公开设置的
Behavior-Subject是Subject类的实现之一。它允许您检索通过使用outObserver推送的最后一个值。
Reactive Property用于在发生某些事情时提供某种排序通知,这是回调的一个更简单的替代方案。
例如:如果你想在游戏中的一个动作上链接很多方法,例如玩家的移动,你可以使用这个矩形属性。
如果你想获得最后一个被推送的值,例如在格斗游戏中进行组合,你可以使用行为主题。