UniRx中的BehaviorSubject和ReactiveProperty之间有什么区别



有什么区别?对我来说,它们看起来很相似。。。你为什么要用一个而不是另一个?

它们的相似之处在于,它们都将存储最后给定的值&您可以通过公共财产访问它们。

区别在于:

  • ReactiveProperty将发出事件,当且仅当值已更改
  • 无论新值是什么,BehaviorSubject都将发出一个事件

在他们的C#代码(开源(中,ReacitveProperty检查新值和上一个值的相等性;BehaviorSubject没有。事实上,没有一个ISubject实现检查相等性。

什么时候应该使用一个而不是另一个?

当我只想在值更改时进行回调时,我会使用ReactiveProperty,即使替换可能更频繁。每当替换发生时,当我想要回调时,我会使用BehaviourSubject

在大多数情况下,ReactiveProperty更有用,因为通常您希望对更改做出反应。CCD_ 9有它自己的用途,尽管不太常见。

其他注意事项:

  • ReactiveProperty.SetValueAndForceNotify()可用于调用回调,而不考虑相等性
  • CCD_ 11可以用于(次要地(引入相等性检查

除了其他答案中提到的差异外,BehaviorSubjectReactiveProperty相比封装得更多。即:

  • BehaviorSubject.Value仅为get(但.OnNext(value)仍然公开可用(
  • CCD_ 17是可公开设置的

Behavior-Subject是Subject类的实现之一。它允许您检索通过使用outObserver推送的最后一个值。

Reactive Property用于在发生某些事情时提供某种排序通知,这是回调的一个更简单的替代方案。

例如:如果你想在游戏中的一个动作上链接很多方法,例如玩家的移动,你可以使用这个矩形属性

如果你想获得最后一个被推送的值,例如在格斗游戏中进行组合,你可以使用行为主题

相关内容

  • 没有找到相关文章

最新更新